я не знаю, что я делаю это так, как OSGi и Maven, поэтому первый некоторые фон:Доступ свойство ПОМ в OSGi расслоения во время выполнения
У меня есть две связки web
и client
. В пакете клиента я хочу получить доступ к службе, которую регистрирует веб-узел. Я уже проверил, что я могу реализовать BundleContextAware
в связке клиента и, если артефакта веб-Bundle является project.web
то следующие работы:
public void setBundleContext(BundleContext bc) {
bc.getServiceReferences(clazz, "(Bundle-SymbolicName=project.web)")
То, что я хотел бы не трудно-код символическое имя веб-расслоением , Символическое название происходит от artifactId
, объявленного в pom.xml
, я верю в магию магии. Так что моя текущая мысль
- создать свойство
web.artifactId
в родительском ПОМ - используется пом веб-Bundle в
<artifactId>${web.artifactId}</artifactId>
- каким-то образом получить доступ, что собственность в клиент расслоении-х
BundleContextAware.setBundleContext
Как это сделать последний шаг? Я предполагаю, что возможно создать java-файл во время выполнения, который присваивает значение свойства некоторому известному идентификатору, поэтому я могу использовать WebBundleInfo.ARTIFACT_ID
; но я не знаю, как это сделать, и задаюсь вопросом, не слишком ли это.
Еще одна мысль - есть ли способ, которым клиентский пакет может использовать System.getProperty
для доступа к этому значению? Я видел некоторые ссылки на доступ к файлу свойств, но я не очень увлекаюсь этим - ни при чтении файла свойств, ни при его создании.
Так что мои вопросы: - Это хороший способ поделиться символическим именем этого пакета? - Есть ли возможность автоматически сделать некоторые свойства, созданные в файле pom, доступными для среды выполнения во время выполнения? - Я думаю, я мог бы выяснить, как сгенерировать такой исходный файл, но это хороший способ решить это? Есть ли способ создать такой файл без исходного файла, то есть из некоторого текста в самом pom.xml? Кроме того, можно ли перезаписать существующий файл только в том случае, если он изменился, чтобы избежать перекомпиляции, потому что после каждой компиляции это закончится новой версией моментального снимка?
Это, кажется, то, что я ищу. Как мне получить что-то в манифесте пакета? В контейнере много пакетов, из которых я хочу заключить договор между веб-и клиентским пакетом и получить ссылку на услугу, зарегистрированную веб-пакетом. В java-коде в клиентском пакете я не хочу жестко кодировать символическое имя веб-пакета. –
Предполагая, что вы используете Apache Felix «maven-bundle-plugin», вы можете добавить свой собственный заголовок в инструкции в вашем pom.xml: <инструкции> (someKey = someValue) MyCustomHeader> instructions> –
Perfect. Я использовал ' $ {web.artifactId} ' в веб-пакете и ' $ {web.artifactId} Web-ArtifactId>' в инструкциях maven-bundle-plugin. Можете ли вы прокомментировать, если это плохо, чтобы добраться до других пакетов по их именам? –