springboot中Maven打包与依赖的jar分开

spring boot添加spring-boot-maven-plugin插件后, 打出来的Jar动辄几十上百兆. 这种FatJar包在传输时会相当不便,  上传速度可能不到200K, 严重影响工作效率. 


        alex-drcs01-rest
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                    com.alex.hainan.ServerStart
                    
                        
                            nothing
                            nothing
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    
                    true
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy
                        package
                        
                            copy-dependencies
                        
                        
                            
                                ${project.build.directory}/lib
                            
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    
                        
                            true
                            lib/
                            ${start-class}
                        
                    
                
            
        
        
            
                src/main/java
                
                    **/*.xml
                
                
                false
            
            
                src/main/resources
                
                    **/*
                
            
        
        compile
    
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的更多用法参见:http://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,不然后面会出现找不到类的错误.未出现

你可能感兴趣的:(java,服务架构)