以下是我的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在执行时无法在运行时找到它的依赖项。以上是否有任何问题。
感谢。
答案 0 :(得分:0)
您需要使用maven-assembly-plugin,例如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.my.Application</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后用
运行它mvn clean compile assembly:single
编译目标应该在汇编之前添加:single。通常,此目标与构建阶段相关联,以自动执行。这可确保在执行mvn install时构建JAR。
如果没有提到maven-shade-plugin,这个答案就不会完整,如果您的依赖项包含有冲突的包名和类名,它可以帮助您。