springboot中Maven打包与依赖的jar分开
spring boot添加spring-boot-maven-plugin插件后, 打出来的Jar动辄几十上百兆. 这种FatJar包在传输时会相当不便, 上传速度可能不到200K, 严重影响工作效率.
<build>
<finalName>alex-drcs01-rest</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该jar包启动时的主类[建议] -->
<mainClass>com.alex.hainan.ServerStart</mainClass>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 剔除spring-boot打包的org和BOOT-INF文件夹(用于子模块打包) -->
<skip>true</skip>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${start-class}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!-- 是否替换资源中的属性 -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<defaultGoal>compile</defaultGoal>
</build>
java -Dloader.path="lib/" -jar *.jar
或
后台启动
nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 &
命令详解:
nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。
>日志文件名.log:是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件中,即输出内容不打印到屏幕上,而是输出到”日志文件名.log”文件中。不指定文件名会在当前目录创建nohup.out,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这里&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“日志文件名.log”文件中。
java -jar 自己的springboot项目.jar:执行springboot的项目,如果单单只执行该命令,linux只会短暂的运行该项目,当退出控制台后会自动关闭该项目。
最后的&:让改作业在后台运行。
java -Dio.netty.leakDetectionLevel=advanced -server -XX:+PrintGCDetails -Xloggc:/usr/local/logs/gc.log -XX:+PrintGCTimeStamps -Dons.client.logRoot=/usr/local/logs -Dons.client.logLevel=WARN -Dons.client.logFileMaxIndex=20 -Djava.security.egd=file:/dev/./urandom -Dloader.path=lib/ -jar *.jar
#内存分配large
#java -Dio.netty.leakDetectionLevel=advanced -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+PrintGCDetails -Xloggc:/usr/local/logs/gc.log -XX:+PrintGCTimeStamps -Dons.client.logRoot=/usr/local/logs -Dons.client.logLevel=WARN -Dons.client.logFileMaxIndex=20 -Djava.security.egd=file:/dev/./urandom -jar *.jar
loader.path指向了外置目录,告诉springboot允许从外部加载依赖.
loader.path的更多用法参见//docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-launching.
可以用mvn dependency:copy-dependencies命令将jar包copy到这个外置目录.
经测试, 经过上面的两个步骤, 笔者的应用从70MB缩小为1.3MB, 极大地缩小了体积.
既缩小了体积, 便于传输, 又很容易地控制依赖jar的版本, 做到全公司统一, 共享同一套依赖集合.
特别地,注意layout应设置为ZIP,不然后面会出现找不到类的错误.未出现
还没有评论,来说两句吧...