Вопрос по java, eclipse, maven – Лучший способ конвертировать существующие Java-проекты в пакеты OSGI

9

У нас есть много компонентов, из которых мы хотим начать только с нескольких. Хотите знать, каков наилучший способ (в контексте моей среды сборки) для создания пакетов из всех этих компонентов?

Моя среда: 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)

Ваш Ответ

3   ответа
3

плагин maven bundle, Он добавит требуемые операторы импорта и экспорта в манифест на основе сканирования вашего кода и зависимостей, определенных в pom. Это потребует наименьшего количества усилий для преобразования.

Я также рекомендую вам использоватьM2Eclipse вместо mvn eclipse: затмение. Он будет синхронизировать ваши настройки и рабочее пространство maven.

Это настраивается, вы можете установить его для внешней установки - может работать с Maven2. Но у вас будет значительно лучший пробег с m2e и maven-bundle-plugin
Но m2eclipse поставляется с Maven 3 справа. Aravind R. Yarram
4

он имеет отличную поддержку для создания проектов, упаковывающих пакеты. Это дает много понимания того, как JAR структурированы и как они зависят от других вещей.

Сейчас довольно старый, но, вероятно, стоит рассказать о своей принадлежности к bndtools
Зачем это нужно? Bndtools - это не продукт?
Перемещает ли bndtools сгенерированные jar-файлы в репозиторий maven автоматически? или как банки можно перенести в mvn repo?
10

чтобы все ваши артефакты становились связками - они, очевидно, не будут волшебным образом работать, но это хороший неразрушающий первый шаг.

При использовании 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>
Очень информативный пост - контент POM особенно полезен, спасибо earcam. Примечание для пользователей: Вы должны закомментировать раздел maven-war-plugin, если он работает на JAR, иначе цель пакета не будет выполнена.
У меня есть два варианта запуска этих нескольких пакетов: 1) во встроенном Apache Felix с WAR 2) Witin WAB Aravind R. Yarram
Я обновил свой пост технологиями. Ты пробовал Тихо? Aravind R. Yarram
@earcam - Отлично, спасибо =) Вместо этого я использовал профили для каждого из jar, war, поскольку таким образом вы можете указать разные BundleActivator для каждого типа. Конфигурация maven-war-plugin вошла в «войну» профиль. Это необходимо только для нас, поскольку мы используем ваш код в частичном архетипе, который может быть применен к существующему проекту любого типа упаковки.
maven.apache.org/archetype/archetype-models/… Постскриптум Краткое изложение того, что делает частичный архетип: i. объединитьarchetype-resources/pom.xml с существующим проектом, и II. Добавьте в существующий проект любые другие ресурсы, которые у вас есть вarchetype-resources, Это очень полезно для функциональности многократного использования обертки, такой как OSGi-фикация, которую мы обсуждаем ранее.

Похожие вопросы