首先提出一个问题,咱们为何要把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