maven-jar-plugin和传递依赖

abe*_*t80 1 maven-2 assemblies jar classpath maven-plugin

我正在使用程序集和jar插件来部署我的应用程序.我也使用jar插件来帮助我使用清单文件生成类路径

<addClasspath>true</addClasspath>
Run Code Online (Sandbox Code Playgroud)

虽然这似乎有效,但是当我尝试执行jar(它有一个适当的主类指定)时会出现问题 - 它将无法找到一个实际上是传递依赖的库.所以我的项目A依赖于项目B,项目B依赖于jar C.程序集插件将正确压缩A,B和C,但jar插件在清单中不包含C,导致ClassNotFoundException.

我没有看到maven-jar-plugin中的任何选项让我指定需要传递依赖.

我是以正确的方式做到的吗?其他人设法将清单中的传递依赖项生成?也许我做错了什么或出了问题.任何帮助赞赏.

Raf*_*mid 7

我试图解决上面提到的问题.在我的情况下它工作(maven-jar-plugin v2.2).我有一个名为jarloading的父项目有3个孩子:

  • 主要:依赖于
  • a:依赖于b
  • b:依赖于a

打电话后

mvn package
Run Code Online (Sandbox Code Playgroud)

使用包含的部署脚本发布它

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/
Run Code Online (Sandbox Code Playgroud)

切换到目录

cd ~/Desktop/jarloading-bin
Run Code Online (Sandbox Code Playgroud)

并运行

java -jar main-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

它工作得很好.


但实际上重点是,如何在清单文件中列出类路径:

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
Run Code Online (Sandbox Code Playgroud)

主项目的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>
...
Run Code Online (Sandbox Code Playgroud)

项目的pom.xml:

...
<dependencies>
    <dependency>
        <groupId>ch.fiftynine.lab</groupId>
        <artifactId>b</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
...
Run Code Online (Sandbox Code Playgroud)

b项目的pom.xml没有什么特别之处.

和附加的源代码和二进制文件: 源代码 二进制文件