Вопрос по java, eclipse, maven – Лучший способ конвертировать существующие Java-проекты в пакеты OSGI
У нас есть много компонентов, из которых мы хотим начать только с нескольких. Хотите знать, каков наилучший способ (в контексте моей среды сборки) для создания пакетов из всех этих компонентов?
Моя среда: Java 6, Maven 2.2.1, Hudson
Технологии: Spring 3.0.5, WebSphere 7, Hibernate 3.2.x и большая часть Apache Commons.
Требования
Modularize only few components. Rest of the components can export all of the packages. When imported into eclipse, I should be able to see the bundles of imported-packages as dependencies in build path (mvn eclipse:eclipse doesn't seem to do this)плагин maven bundle, Он добавит требуемые операторы импорта и экспорта в манифест на основе сканирования вашего кода и зависимостей, определенных в pom. Это потребует наименьшего количества усилий для преобразования.
Я также рекомендую вам использоватьM2Eclipse вместо mvn eclipse: затмение. Он будет синхронизировать ваши настройки и рабочее пространство maven.
чтобы все ваши артефакты становились связками - они, очевидно, не будут волшебным образом работать, но это хороший неразрушающий первый шаг.
При использовании maven-bundle-plugin убедитесь, что вы установилиextensions
а такжеsupportedProjectTypes
так как у вас могут быть проблемы со сборками CI, репозиториями Maven и m2e, если тип упаковкиbundle
(см. конец).
Проверьте свои наиболее опасные / основные внешние зависимости на раннем этапе - например, если вы используете JPA для обеспечения устойчивости, то убедитесь, что поставщик работает в среде OSGi с вашим комплектом домена и драйвером JDBC.
Если вы мигрируете с Java EE / spring, посмотрите на Karaf или Virgo. Но если ваши компоненты предназначены для встроенных систем или не имеют внешних зависимостей, то может быть достаточно Felix или Equinox (хотячел-URL проект, если это так).
Возможно, стоит отредактировать ваш вопрос, чтобы быть немного более конкретным о области / технологиях?
eclipse: eclipse генерирует только то, что при первой настройке проекта проблемы с жизненным циклом m2e могут быть немного болезненными, но это гораздо лучше, чем при использовании старого плагина eclipse.
Следующее добавит записи манифеста к существующим артефактам, не изменяя их каким-либо другим способом. Он сообщает стандартным плагинам maven jar и war использовать файл MANIFEST.MF, сгенерированный maven-bundle-plugin.
Поместите это в родительский POM:
<pluginManagement>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
</archive>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
</supportedProjectTypes>
<instructions>
<Built-By>${project.organization.name}</Built-By>
<Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
<Bundle-ContactAddress>${project.organization.url}</Bundle-ContactAddress>
<Bundle-Description>${project.description}</Bundle-Description>
<Bundle-DocURL>${bundle.doc.url}</Bundle-DocURL>
<Bundle-Category>${bundle.category}</Bundle-Category>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Import-Package>*</Import-Package>
<Export-Package>*</Export-Package>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle</id>
<goals>
<goal>manifest</goal>
</goals>
<phase>prepare-package</phase>
<inherited>true</inherited>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>create-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<inherited>true</inherited>
</execution>
</executions>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
</pluginManagement>
Тогда в дочерних POM вы можете просто сделать:
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
<!-- Below is mutually exclusive: Either jar or war plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>
archetype-resources/pom.xml
с существующим проектом, и II. Добавьте в существующий проект любые другие ресурсы, которые у вас есть вarchetype-resources
, Это очень полезно для функциональности многократного использования обертки, такой как OSGi-фикация, которую мы обсуждаем ранее.