2009-07-06 3 views
1

Я использую плагины сборки и jar для развертывания моего приложения. Я также использую баночку плагин, чтобы помочь мне сформировать пути к классам в файле манифеста, используяmaven-jar-plugin и транзитивные зависимости

<addClasspath>true</addClasspath> 

Хотя это, кажется, работает, проблема возникает, когда я пытаюсь выполнением банки (он указал правильный основной класс) - он не сможет найти библиотеку, которая на самом деле является транзитивной зависимостью. Таким образом, мой проект A зависит от проекта B, а проект B зависит от jar C. Плагин сборки правильно застегивает A, B и C, но плагин jar не содержит C в манифесте, вызывая ClassNotFoundException.

Я не вижу никаких параметров в maven-jar-plugin, который позволяет мне указать, что необходимы транзитивные зависимости.

Я делаю это правильно? Кому-нибудь еще удалось получить транзитивные зависимости, сгенерированные в манифесте? Возможно, я делаю что-то неправильно или не в порядке. Любая помощь оценивается.

ответ

0

Я вроде удалось решить с помощью ... на самом деле не его решения.Я проверил ближе и все еще не знаю, почему некоторые транзитивные зависимости не подхватываются - кажется, они пропускают их, и они в конечном итоге не генерируются в MANIFEST.

Я немного подкопался и играл с плагином, зависящим от maven. Удивительно, но настройка <attach>true</attach> и привязка ее к фазе assembly:assembly позволила решить проблему с классом.

5

Я попытался решить указанную проблему. в моем случае это сработало (maven-jar-plugin v2.2). у меня есть родительский проект под названием jarloading, который имеет 3 Чайлдс:

  • главное: с зависимостью к
  • а: с зависимостью б
  • б: с зависимостью к

после вызова

mvn package 

опубликовать его, используя Deploy скрипт, содержащий

rm -r ~/Desktop/jarloading-bin 
mkdir ~/Desktop/jarloading-bin 
cp a/target/a-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/ 
cp b/target/b-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/ 
cp main/target/main-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/ 

меняющийся в каталог

cd ~/Desktop/jarloading-bin 

и работает

java -jar main-0.0.1-SNAPSHOT.jar 

он работал отлично.


, но на самом деле дело в том, как путь к классам приведены в файле манифеста:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Built-By: rschmid 
Build-Jdk: 1.6.0_07 
Main-Class: Main 
Class-Path: a-0.0.1-SNAPSHOT.jar b-0.0.1-SNAPSHOT.jar 

pom.xml основного проекта:

... 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <index>true</index> 
        <manifest> 
         <mainClass>Main</mainClass> 
         <addClasspath>true</addClasspath> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>ch.fiftynine.lab</groupId> 
     <artifactId>a</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 
... 

pom.xml из проект:

... 
<dependencies> 
    <dependency> 
     <groupId>ch.fiftynine.lab</groupId> 
     <artifactId>b</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 
... 

pom.xml of b project содержит ничего действительно особенного.

и прилагается исходный код и бинарные файлы: source code binaries

+0

+1 за усилия, помогая мне с образцом! Благодаря! – aberrant80

Смежные вопросы