首先提出一個問題,咱們爲何要把jar包分離出來?java
緣由很簡單咱們用spring-boot-maven-plugin插件打包後的jar文件一般生成的jar比較大,少則幾十M,若是上傳雲服務器外網傳輸會比較慢,爲啥打包後文件會很大呢,這是由於裏面包含了咱們項目依賴的衆多jar,那麼咱們就能夠大膽的想能不能把jar分離出來,由於項目在發佈的時候每每修改的是配置文件和java文件,對於依賴jar不多修改,因此就冒出一個想法,每次只發布變動的class和配置文件部分,能不能把jar剝離出來,開心的是maven確實提供了這種方式打包。使用maven-jar-plugin插件來打包便可剝離出jar。spring
問題拋出了,那麼如何解決嗎?修改pom.xml文件,把原來的spring-boot-maven-plugin打包插件換成maven-jar-pluginapache
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <!--此處修改成你的應用入口類全路徑--> <mainClass>com.jetsen.edu.StatisticsApplication</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <!--這個插件就是把依賴的jar包複製出來放到編譯後的target/lib目錄,而且在打包時候排除內部依賴--> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins> </build>
接下來在項目根目錄執行打包命令:mvn clean package -Dmaven.test.skip=true服務器
打包結束後我在target目錄會發現有一個lib目錄裏面全是咱們項目依賴的jar文件,然咱們在發佈時候把lib目錄和打包好的jar文件一同上傳到雲服務器便可,之後若是項目依賴沒有變化只須要上傳xxxx.jar文件到雲服務器, 執行 java -jar xxxx.jar & 命令便可,若是若依賴發生變化就須要替換lib目錄 這種方式打包完的jar文件每每只有幾百kb的大小,上傳也是很是快。maven