Java在执行由配置了精确类路径参数的mavenjarpluin生成的可执行jar时无法找到依赖项
以下是我的java应用程序的目录结构:
application.jar
dependency-jars
a.jar
b.jar
c.jar
当我使用以下命令时,应用程序执行良好:java -cp "application.jar;dependency-jars/*" com.my.Application
。除了应用程序依赖项之外,“dependency jars”文件夹的使用者还将删除JAR。我想让它成为一个可执行的jar,以便它的消费者能够轻松地调用它。为了创建可执行jar,我使用了maven jar插件。我想模拟上面的命令行。我使用了以下maven jar插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.my.Application</mainClass>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>dependency-jars/*</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
执行时生成的jar无法在运行时找到其依赖项。上面有什么问题吗
谢谢
# 1 楼答案
您需要将maven-assembly-plugin用于以下情况:
你用它来运行它
应在汇编之前添加编译目标:single。通常,此目标与构建阶段相关联,以自动执行。这确保了在执行mvn安装时构建JAR
如果不提到maven-shade-plugin,这个答案将是不完整的,它可以帮助您防止依赖项jar的包名和类名发生冲突