我试图解决上述问题。就我而言,它有效(maven-jar-plugin v2.2)。我有一个名为 jarloading 的父项目,它有 3 个孩子:
- main: 依赖于 a
- a: 依赖于 b
- b: 依赖于 a
打电话后
mvn package
使用包含的部署脚本发布它
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>
...
b 项目的 pom.xml 没有什么特别之处。
并附上源代码和二进制文件:
源代码
二进制文件