Maven: OSGI, пакеты и многомодульные проекты - PullRequest
11 голосов
/ 17 декабря 2008

В настоящее время я разрабатываю приложение на основе OSGi (с использованием Equinox), пытаясь создать веб-учебник, который я нашел на OSGi + Equinox. В этом проекте есть пакеты в зависимости от других пакетов (цитата-сервис зависит от цены). Фаза компиляции проходит успешно, а фаза пакета - нет. Maven жалуется на следующее:

[INFO] [bundle:bundle]
[ERROR] Error building bundle de.vogella.osgi:quote-service:bundle:0.0.1 : Unresolved references to [de.vogella.osgi.quote] by class(es) on the Bundle-Classpath[Jar:dot]: [de/vogella/osgi/quoteservice/Activator.class, de/vogella/osgi/quoteservice/QuoteService.class]
[ERROR] Error(s) found in bundle configuration

Я понимаю проблему, но не понимаю, как заставить ее работать. Это цитата пом:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/maven-v4_0_0.xsd">

<parent>
    <artifactId>osgi-first-app</artifactId>
    <groupId>de.vogella.osgi</groupId>
    <version>0.0.1</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>de.vogella.osgi</groupId>
<artifactId>quote</artifactId>
<packaging>bundle</packaging>
<name>Quote Bundle</name>
<version>0.0.1</version>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>1.4.3</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <_include>src/main/resources/META-INF/MANIFEST.MF</_include>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

и манифест пакета цитаты:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Quote Plug-in
Bundle-SymbolicName: de.vogella.osgi.quote
Bundle-Activator: de.vogella.osgi.quote.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: org.osgi.framework;version="1.3.0"
Export-Package: de.vogella.osgi.quote

Тогда pom-сервис цитаты:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/maven-v4_0_0.xsd">

<parent>
    <artifactId>osgi-first-app</artifactId>
    <groupId>de.vogella.osgi</groupId>
    <version>0.0.1</version>
</parent>

<dependencies>
    <dependency>
        <groupId>de.vogella.osgi</groupId>
        <artifactId>quote</artifactId>
        <version>0.0.1</version>
        <type>bundle</type>
    </dependency>
</dependencies>

<modelVersion>4.0.0</modelVersion>
<groupId>de.vogella.osgi</groupId>
<artifactId>quote-service</artifactId>
<packaging>bundle</packaging>
<name>Quote Service Bundle</name>
<version>0.0.1</version>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>1.4.3</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <_include>src/main/resources/META-INF/MANIFEST.MF</_include>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

И, наконец, манифест цитатного сервиса:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Quoteservice Plug-in
Bundle-SymbolicName: de.vogella.osgi.quoteservice
Bundle-Activator: de.vogella.osgi.quoteservice.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: org.osgi.framework;version="1.3.0", \
 de.vogella.osgi.quote;version="0.0.1"

Что-то не так? Заранее спасибо!

Ответы [ 3 ]

12 голосов
/ 18 декабря 2008

Ответ довольно прост: я удалил уже определенный манифест и использовал записи bnd в инструкциях к плагину пакета. Это работает!

3 голосов
/ 19 апреля 2009

Tycho предназначен для решения подобных проблем.

1 голос
/ 06 марта 2011

Я написал инструмент под названием auto-builder: http://code.google.com/p/auto-builder. Он анализирует проекты на основе PDE и генерирует файлы сборки Ant; он поддерживает транзитивное закрытие по зависимостям и всему этому джазу.

Я опубликовал статью: http://empty -set.net /? P = 9 . Я написал это потому, что инструменты Maven, с которыми я играл, при интеграции с PDE не «просто работали». По сути, я хотел заниматься кодированием в PDE и иметь CI на основе Гудзона без суеты между ними.

Генерация Ant-файлов хороша тем, что дает вам все преимущества декларативного инструмента сборки, но оставляет процедурное описание того, что он делает.

Я ищу больше проектов на базе PDE, чтобы протестировать их. Есть несколько репозиториев RFC-0112 Bundle, и у меня есть некоторый код для загрузки зависимостей. Если кому-то интересно, я мог бы интегрировать загрузку зависимостей с авто-компоновщиком.

...