文章目錄
- 一、問題和現象
- 二、解決方法
- (1)方法一、maven-jar-plugin+maven-dependency-plugin
- (2)方法二、maven-assembly-plugin
一、問題和現象
現在的開發一直都是用spring boot,突然有一天,要自己開發一個沒有springboot的程序,才想起mvn package都快遺忘了。主要存在兩個問題:
-
打包的程序沒有main入口。
-
打包的程序沒有包含依賴。
二、解決方法
這里有兩種方法:
(1)方法一、maven-jar-plugin+maven-dependency-plugin
這種方法最后生成的jar包,不會把依賴放到jar里,只是會把/lib放到跟jar一個目錄。看下圖:
- maven-jar-plugin 負責打jar包,寫main入口
- maven-dependency-plugin 負責找出依賴,把所有依賴copy到lib目錄中。
優點:發布新程序的時候-速度快。缺點:第一次依賴lib要自己copy
源代碼我就不多講解了。這里貼出我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.apep</groupId><artifactId>truncate_db</artifactId><version>1.0-SNAPSHOT</version><description>定時刪除N天前的歷史數據</description><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><mainClass>TruncateApplication</mainClass><!--將依賴的存放位置添加到 MANIFEST.MF 中--><classpathPrefix>lib/</classpathPrefix></manifest></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.6.0</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins></build>
</project>
(2)方法二、maven-assembly-plugin
這種方法是把lib打到jar中的方法
先上代碼
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.apep</groupId><artifactId>truncate_db</artifactId><version>1.0-SNAPSHOT</version><description>定時刪除N天前的歷史數據</description><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.5.5</version><configuration><archive><manifest><mainClass>TruncateApplication</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>
最后看一下生成的文件:
明顯比剛才大了很多。