Ответ 1
Ответ довольно прост: я удалил уже установленный манифест и использовал записи bnd в инструкциях плагина. Это работает!
В настоящее время я разрабатываю приложение на основе OSGi (используя Equinox), пытаясь ошеломить веб-учебник, который я нашел на OSGi + Equinox. В этом проекте есть пучки, зависящие от других связок (quote-service зависит от цитаты). Фаза компиляции успешно завершена, но фаза пакета не работает. 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
Я понимаю проблему, но не вижу, как заставить ее работать. Это цитата 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>
<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>
И, наконец, манифест quot-service:
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"
Есть ли что-то не так? Заранее благодарю вас!
Ответ довольно прост: я удалил уже установленный манифест и использовал записи bnd в инструкциях плагина. Это работает!
Tycho предназначен для решения этих проблем.
Я написал инструмент под названием auto-builder: http://code.google.com/p/auto-builder. Он анализирует проекты на основе PDE и генерирует файлы сборки Ant; он поддерживает переходное закрытие по зависимостям и всему этому джазу.
Я опубликовал рецензию: http://empty-set.net/?p=9. Я написал это, потому что инструменты Maven, с которыми я играл, когда они интегрированы с PDE, не "просто работали". В принципе, я хотел сделать кодирование в PDE и иметь CID на основе Хадсона без каких-либо проблем между ними.
Генерация файлов Ant хороша, поскольку дает вам все преимущества инструмента декларативного построения, но он оставляет вам процедурное описание того, что он делает.
Я ищу дополнительные проекты на основе PDE, чтобы проверить его. Есть несколько репозиториев RFC-0112 Bundle, и у меня есть код для загрузки зависимостей. Если кому-то интересно, я могу интегрировать загрузку зависимостей с помощью авто-строителя.