У меня есть плагин Eclipse с этим манифестом:
...
Bundle-ClassPath: .,
lib/drools-api.jar,
lib/drools-core.jar,
...
Теперь мы не хотим помещать drools-api.jar
и drools-core.jar
в систему контроля версий, поэтому мы используем плагин для их извлечения из репозитория maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-bundle-classpath-libs</id>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>lib</outputDirectory>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<stripVersion>true</stripVersion>
<artifactItems>
<artifactItem>
<groupId>org.drools</groupId>
<artifactId>drools-api</artifactId>
</artifactItem>
<artifactItem>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
</artifactItem>
...
Однако, в первый раз мы собираем этот модуль, он не работает, потому что это происходит:
[WARNING] Missing classpath entry lib/drools-api.jar ...
[WARNING] Missing classpath entry lib/drools-core.jar ...
...
[INFO] --- maven-dependency-plugin:2.1:copy (copy-bundle-classpath-libs) ... ---
...
[INFO] Copying drools-api-5.2.0-SNAPSHOT.jar to .../lib/drools-api.jar
[INFO] Copying drools-core-5.2.0-SNAPSHOT.jar to .../lib/drools-core.jar
...
[INFO] --- maven-osgi-compiler-plugin:0.10.0:compile (default-compile) ... ---
...
[INFO] Compiling 458 source files to ...
// ERROR because drools-api is not in the compilation classpath
Если мы просто создадим его снова, он завершится успешно, поскольку файлы jar уже находятся в каталоге lib
до начала сборки: предупреждений нет, и файлы находятся в пути к классам компиляции.
Как мы можем это исправить, чтобы нам не нужно было фиксировать jar в управлении исходным кодом и по-прежнему использовать Bundle-ClassPath
?
Примечание : текущая реализация плагина требует от нас использования Bundle-ClassPath
: использование Require-Bundle
вместо этого не вариант.