一、maven工程打包成jar文件插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.wjl.Main</mainClass>
<!--
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
-->
</manifest>
</archive>
</configuration>
</plugin>
二、打包完工程的jar和依赖都在同一目录。
(1)如果通过maven打包时,指定了<addClasspath>且正确。其效果完全等价于其他打包方式,自己在MANIFEST.MF指定好了Class-Path。
此时,运行的命令,直接运行jar包即可。
java -jar hello-test-0.0.1-SNAPSHOT.jar
(2)如果没有指定<addClasspath>和<classpathPrefix>,或者手动设置MANIFEST.MF。此时,即便依赖的jar包都在相同目录下,指定运行的classpath。
这个时候,容易想当然,把命令错误的写成:
//错误展示
java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar -jar hello-test-0.0.1-SNAPSHOT.jar
实际上正确的写法应该是:
java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main
通过指定当前目录的方式,可以缩写为:
java -cp ./*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main
三、如果运行的jar和依赖不在同一目录。
这个情况简单就是maven插件指定了<addClasspath>为true,同时指定了<classpathPrefix>。
这样生成的MANIFEST.MF的classpath,都会在每个jar包的路径上带上prefix,使得java命令可以找到。
如果没有这样配置,那么就要在运行命令时,指定classpath了,命令如下:
java -cp lib/*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main
四、maven插件把依赖的所有jar包找出来
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-rar-plugin</artifactId>
<version>2.4</version>
</plugin>
配置该插件,然后需要执行命令 mvn rar:rar 。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。