-
Notifications
You must be signed in to change notification settings - Fork 8
About how to use Maven to package executable jar projects
june edited this page Jul 18, 2018
·
2 revisions
关于这一点,可以参考pom.xml文件中的插件定义部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<archive>
<manifestFile>src/main/java/META-INF/MANIFEST.MF</manifestFile>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.judy.Runner</mainClass>
</manifest>
</archive>
<classesDirectory>
</classesDirectory>
</configuration>
</plugin>
需要注意的一点儿就是,必须自定义MANIFEST.MF文件,这是因为,项目中引用了本地的三个jar包文件,插件默认是不会将这三个文件放到MANIFEST.MF中去的,运行jar项目后还是会报未找到XXX类的异常,因此我们必须自己写MANIFEST.MF文件。
编写MANIFEST.MF文件时需要注意:
- 第一行不能空,行与行之间不能有空行,每一行的最后一个字符不能是空格
- 最后一行一定是空行
- 每个属性的名称和值之间(冒号后面)一定要有空格
- 文件的每一行都不能超过72个字节(一般是70个ASCII字母加上回车换行符)
- 如果72个字节不够用,则另起一行并以空格开头
- 以空格开头的行都被视为前一行的续行
具体详细的规范请参见Java的官方文档,注意事项见“Notes on Manifest and Signature Files” 一节.
还需要注意的是,Class-Path属性指定的类或jar包是本地的文件,不可以是远程访问的类或者JAR包文件中的JAR包,即不能是jar in jar;当然也就不能是本jar包中包含的jar包。要实现对jar in jar的引用,需要自定义相关代码来读取它们。
最后,使用 maven install
命令后,执行 java -jar name.jar
,成功运行。