Java打包jar包的全部方式

1. spring-boot-maven-plugin插件(在springboot项目中使用)


    org.springframework.boot
    spring-boot-maven-plugin
    
        
            
                repackage
            
            
                spring-boot
                
                  com.xy.Application
                
            
        
    

2. shade插件(推荐)

执行mvn package后,会在target文件夹下生成两个jar包,一个是不带依赖的jar包,一个是后缀有-shaded带有依赖的jar包。 

            
                org.apache.maven.plugins
               maven-shade-plugin
               2.4.1
                
                    
                       package
                        
                           shade
                        
                        
                           
                                
                                    com.my.jvm.AssemblyTest
                               
                            
                        
                    
               
           

3. assembly插件(spring项目可能会报错)

执行mvn package后,会在target文件夹下生成两个jar包,一个是不带依赖的jar包,一个是后缀有-dependencies带有依赖的jar包。


      org.apache.maven.plugins
           maven-assembly-plugin
              
                   
                    
                      com.my.jvm.AssemblyTest
                       
                     
                     
              
                        jar-with-dependencies
                
           
    

4. maven-jar-plugin插件

最终打出来的jar包,没有其他依赖包,第三方依赖包集中放在 lib文件夹下。

addClasspath:是否在manifest文件中添加classpath。默认为false。如果为true,则会在manifest文件中添加classpath,这样在启动的时候就不用再手动指定classpath了。

            
               maven-jar-plugin
                
                    
                       make-a-jar
                        compile
                        
                           jar
                        
                    
                
                
                            
                                    
                           true             
                           lib/             
                           com.my.jvm.AssemblyTest          
                             
                    
                    
                       *.properties
                       *.txt
                    
                
           

5. maven-dependency-plugin插件

这个插件似乎并不能直接打成可执行jar,它的常见的作用是把依赖集中起来放在lib文件夹下,经常配合maven-jar-plugin或者spring-boot-maven-plugin使用。


    org.apache.maven.plugins
    maven-dependency-plugin
    
        
            copy-dependencies
            prepare-package
            
                copy-dependencies
            
            
                
                    ${project.build.directory}/libs
                
            
        
    

6. 手动修改打包配置(不推荐)

/META-INF/ MANIFEST.MF

普通的jar包:

Manifest-Version: 1.0Archiver-Version: Plexus ArchiverBuilt-By: AdministratorCreated-By: Apache Maven 3.3.3Build-Jdk: 1.8.0_171

要变成可执行jar包,需要指定main

Main-Class:com.my.jvm.AssemblyTest

如果jar包有依赖其他第三方jar,还要指定Class-Path

Class-Path:lib/log4j-1.2.17.jar lib/slf4j-log4j12-1.7.21.jar lib/slf4

 7.项目瘦身方式

把固定的不会经常变的第三方jar提前放在服务器上,每次只要更新自己的业务代码jar包即可


        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    true
 
                    ZIP
                    
                    
                        
                            nothing
                            nothing
                        
                    
                
            

            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy
                        package
                        
                            copy-dependencies
                        
                        
                            
                            
                                ${project.build.directory}/lib
                            
                        
                    
                
            
        
    

 

执行需要通过-Dloader.path指定lib的路径:

java -Dloader.path=./lib -jar myProj-1.0.0.jar

如果自己的项目里有自己的依赖需要,而且经常会更新,那就不能放在lib里了,lib里保证是放第三方jar包,不会去动版本的。

那怎么做:spring-boot-maven-plugin 里的includes加需要包即可。

 
            
                
                    com.jincou
                    xiaoxiao-util
                
            

缺点:多人项目难管理第三方jar,如果第三方jar包有人要更新,就有可能会忘记去服务器上更新。

总结:

  • 普通项目用shade、assembly都行,我喜欢用shade。

  • springboot项目用spring-boot-maven-plugin。

  • 项目瘦身,提升部署效率,也是一项必须要会的技能。

你可能感兴趣的:(Maven,java,jar,开发语言)