一、为什么分离
在项目打包时,体积比较大,主要来源依赖。多次部署的时候,我们期望只上传改变了的东西,因此决定分离;
二、如何分离
修改启动类的
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!--启动类path--> <mainClass>cn.iocoder.yudao.server.YudaoServerApplication</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <!-- 如果不指定,classpath 可能会找不到,加载资源有问题 --> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dep</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!--依赖包路径--> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> <!-- 打包后的文件名--> <finalName>${project.artifactId}</finalName> </build>
如果依赖没有变化,第一次上传lib和yudao-server.jar,第二次只用上传 yudao-server.jar,体积只有之前的1%。
三、分离后如何启动
增加了 -Dloader.path参数,指定分离出jar包位置即可,其他参数不变
java -Dloader.path=E:\code\CRM_backstage\yudao-server\target\lib -jar yudao-server.jar
nohup java -Dloader.path=/usr/local/jar/crmlib -jar /usr/local/jar/CRMTest.jar --server.port=48081 > /dev/null 2>&1 &
四、优势
分离前部署上传50到100多兆文件,分离后可能不到1兆,部署上传非常快,省的时间可以喝杯水,不挺好的吗。