Maven 打包 jar

Maven 常用的打包方式

插件 功能
maven-jar-plugin maven 默认打包插件,用来创建 project jar
maven-shade-plugin 打可执行包,executable(fat) jar
maven-assembly-plugin 支持自定义打包方式
spring-boot-maven-plugin spring boot 定制的打包方式

java 项目打包

maven-jar-plugin


    org.apache.maven.plugins
    maven-jar-plugin
    
        
            
                true
                lib/
                 ${包名.MainClass类名} 
            
        
    

在没有引用任何依赖的情况下,上面的打包方式是可以的。但如果你的项目有引用第三方lib,则需要额外添加插件maven-dependency-plugin。它的 addClasspath 和 classpathPrefix 表明,会把 lib 下的jar作为第三方依赖加入 package 里,去target目录下也可以发现多了个lib目录。


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

maven-shade-plugin


	
	   
			
			
				org.apache.maven.plugins
				maven-shade-plugin
				
					
						package
						
							shade
						
						
							
								
								     ${包名.MainClass类名} 
								
							
						
					
				
			
		
	

maven-assembly-plugin



    org.apache.maven.plugins
    maven-assembly-plugin
    
        
        
            jar-with-dependencies
        
        
        
            
                 ${包名.MainClass类名} 
            
        
    
    
        
            make-assembly
            
            package
            
                single
            
        
    

spring boot 项目打包

spring-boot-maven-plugin

设置打包类型

spring 之前基本都是打成 war 类型,现在以 jar 类型为主,查看 pom.xml



	
	jar
	

配置插件

创建 spring boot 的时候,自动帮你添加了 spring-boot-maven-plugin,即使不对其进行任何配置操作,也可以直接使用 mvn package 命令将其打包!

对于 spring-boot-starter-parent 的项目, 需要在properties中指定start-class启动类。

  • layout 属性用来指定打成什么类型
类型 Main-Class 含义
jar org.springframework.boot.loader.JarLauncher 可执行的 jar
war org.springframework.boot.loader.warLauncher 可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided
zip org.springframework.boot.loader.PropertiesLauncher DIR,类似于JAR
module 将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher
none 将所有的依赖库打包,但是不打包Spring Boot的任何Launcher
  • 构建目标
目标 含义
run 运行 spring boot 项目
repackage 默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
start / stop 在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
build-info 生成Actuator使用的构建信息文件build-info.properties


	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.3.2.RELEASE
		
	
	
	
		  ${包名.MainClass类名}  
		UTF-8
		14
	
	
	
		
			
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					${start-class}
					ZIP
				
				
					
						
							repackage
						
					
				
			
			
		
	

打包

执行 mvn package spring-boot:repackage 进行打包,在 target 目录下就会生成打包好的 jar 文件了。使用 nautilus target/ 可以直接打开 target 所在的文件管理器进行操作
Maven 打包 jar_第1张图片打开 jar 中的 /META-INF/MANIFEST.MF 文件,可以看到之前配置的 Main-Class 和 layout 类型对应的 Start-Class

Manifest-Version: 1.0
Created-By: Maven Jar Plugin 3.2.0
Build-Jdk-Spec: 14
Implementation-Title: demo
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.demo.DemoApplication
Spring-Boot-Version: 2.3.2.RELEASE
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx

画蛇添足

spring 默认自带了 spring-boot-maven-plugin 来打包程序,如果又引入 maven-shade-plugin 打包时会报如下错误
Maven 打包 jar_第2张图片

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.2.4:shade (default) on project demo: Unable to parse configuration of mojo org.apache.maven.plugins:maven-shade-plugin:3.2.4:shade for parameter resource: Cannot find ‘resource’ in class org.apache.maven.plugins.shade.resource.ManifestResourceTransformer -> [Help 1]

你可能感兴趣的:(#,Maven)