解决微信自动清除缓存,每天都需要重
556 2023-04-03 01:53:01
用java写了一个小工具,使用maven java 工程。写完后,想打包成一个可执行的jar包,使用如下方法:
1、使用maven的插件maven-assembly-plugin
pom.xml里添加
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build>
执行命令:
mvn clean compile assembly:single
在target文件夹里生成MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar,这个jar包便是可执行的jar了,用命令java -jar pathjarfile
便可以执行。
注意:compile必须再assembly:single之前,要不然你工程的代码(class文件)就不会被打包进去。assembly:single是maven的goal。
2、通常情况下,这个goal要绑定到maven build 的phase里,这样它就可以自动执行。mvn package是用来打包jar包的,只是jar包是不可执行(因为不包括其他依赖)。
我们在以上的pom文件里加<executions>,来将所有依赖也打包进去就可以执行了。
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions></plugin>
如此,就直接运行以下命令即可。
mvn clean package
3、另外有几点要注意:
1. 必须要有
<archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest></archive>
否则会报错 :no main manifest attribute, in targetMavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar <mainClass>
是你自己工程的入口。
2. 使用mvn clean compile assembly:single
,只生成一个jar包,其名字里有jar-with-dependencies,是可以直接执行的。
使用mvn package
生成两个jar包,名字里有jar-with-dependencies的jar是可执行的。
3. 如果使用<goal>assembly</goal>
会生成两个jar包。跟使用了mvn package
一样,无需再像命令assembly:single
一样前面必须加compile.