Строить банку, которая будет использоваться в Eclipse PDE?
Вопрос
Я написал приложение, которое использует третью сторону библиотеку. Затем я упаковал это в качестве исполняемой банки, используя плагин Maven-Assember-Plugin (создавая банку со всеми зависимостями, включая некоторые из сторонних банок).
Далее мне нужно добавить эту банку в проект PDE, поэтому его можно запустить из Eclipse. Но сделать эту работу, мне нужно добавить некоторые тирско-партийные зависимости в мой PDE-проект, который уже находится в упакованной банке. Поэтому я получаю дублированные зависимости. Любые идеи о том, как избежать этого? Или предложение к документации, которая описывает, как это делается должным образом?
Решение
Вы должны построить банку, это Osgi Bundle: Итак, оно содержит необходимые манифест. MF с помощью подключаемого идентификатора и номером версии (это не меняет факт, что баночка остается исполняемым). Будьте осторожны, чтобы добавить опцию «Экспорт-пакеты», чтобы сделать код доступен для других плагинов / пучков.
После этого вы можете установить эту банку в целевую платформу, используемую PDE Project (поиск целевой платформы в настройках), поэтому он становится доступным для других плагинов по ID (вы можете добавить его как зависимость).
Таким образом, если хотя бы один плагин нуждается в вашей банке, она загружается, но не будет загружена несколько раз.
Другие советы
Я думаю, что это просто простая плохая практика, чтобы включить другие банки в вашей банке. Но если вы хотите сохранить это таким образом, как насчет создания двух банок из одной сборки: полный с зависимостями, и простой, который используется в PDE (просто используйте несколько исполнений в плагине сборки)
Сейчас я использую плагин Maven-Bundle:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>1.4.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${pom.name}</Bundle-Name>
<Bundle-Version>${pom.version}</Bundle-Version>
<Bundle-Activator>org.wso2.mbp.sample01.Activator</Bundle-Activator>
<Private-Package>org.wso2.mbp.sample01</Private-Package>
</instructions>
</configuration>
</plugin>
http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html.
построить пакет. Но как я могу использовать плагин Bundle, поэтому он создает файл манифеста для BAR Build с помощью плагина Maven-Assember, который я использую:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<finalName>myApp</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.TestMain</mainClass>
<packageName>com.</packageName>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>