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中的任何选项让我指定需要传递依赖.
我是以正确的方式做到的吗?其他人设法将清单中的传递依赖项生成?也许我做错了什么或出了问题.任何帮助赞赏.
我试图解决上面提到的问题.在我的情况下它工作(maven-jar-plugin v2.2).我有一个名为jarloading的父项目有3个孩子:
打电话后
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没有什么特别之处.
| 归档时间: |
|
| 查看次数: |
6688 次 |
| 最近记录: |