Используйте maven tycho для сборки с помощью записи манифеста Bundle-ClassPath, которая загружается плагином maven-dependency-plugin - PullRequest
8 голосов
/ 16 февраля 2011

У меня есть плагин 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 вместо этого не вариант.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

это известная ошибка.

см. https://issues.sonatype.org/browse/TYCHO-577

1 голос
/ 16 февраля 2011

Я пытался сделать подобное, и у меня сложилось впечатление, что это не сработает.

Похоже, что плагин maven-dependency-plugin требует разрешения пути к классам компиляции для загрузки JAR-файлов (даже если вы указываете зависимости через ).

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

Чтобы решить эту проблему, я создал отдельный профиль "download-deps", который я использовал для обновления каталога библиотек (например: mvn -Pdownload-deps validate).

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

...