由"mvn-package"创建的jar归档文件是否既不包含其依赖项,也不指示哪个.class文件包



运行mvn package打包编译的包含main()的java程序后,

  • 创建的jar文件不包含依赖项,所以在运行jar文件时,我仍然需要提供依赖项,这正确吗?

  • 创建的jar文件没有指示其中哪个.class文件包含main()作为入口点,所以在运行jar文件时,我仍然必须指示包含main()的.class,这是正确的吗?

谢谢。

这取决于情况。默认情况下,答案是肯定的,它不包含此信息。

但是Maven可以配置为包含这些内容。为了包含依赖项,可以使用Maven Assembly插件并使用jar-with-dependencies设置将其绑定到包阶段,或者使用Maven Shade插件(也绑定到包相位(。它们是相似的,尽管我更喜欢Shade插件,因为它支持所谓的transformer,可以解决将多个jar文件合并为一个jar文件时遇到的一些问题。

要将主类定义为入口点,可以配置Maven编译插件:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>

如果这样配置,则不必调用java -cp my.jar my.main.Class arguments,只需将其称为java -jar my.jar arguments即可。如果您还有额外的依赖项,您可以用java -jar my.jar -cp dependencies/*.jar arguments来调用它。

最新更新