1.pom.xml文件 - pom.xml说明

史上最全的 pom.xml 文件详解:史上最全的 pom.xml 文件详解_雨雾清影的博客-CSDN博客_pom.xml 

参考:Maven的pom.xml文件详解------Build Settings_tomato__的博客-CSDN博客_pom中build

  1. dependencies和dependencyManagement以及plugins和pluginManagement的区别

    1. dependencies和dependencyManagement区别
      dependencies:子POM会完全继承父POM中声明的dependencies,如果子POM中没有声明某个依赖项,但是父POM中声明了该依赖项,就会直接从父POM中继承该依赖项,如果子POM也声明另外相同依赖包,那么子POM会覆盖父POM中依赖声明。dependencyManagement:只是声明依赖,并不实现引入,除非子POM显示声明需要用该依赖项。如果不在子POM中声明依赖,是不会从父POM中继承依赖的;只有在子POM中声明了该依赖项,并且没有指定具体版本,才会从父POM中继承该项,并且version和scope都读取自父POM;另外如果子POM中指定了版本号,那么会使用子POM中指定的jar版本。
      总结:dependencyManagement其实只是一个管理jar的作用,是管理jar的版本,其他的什么作用都没有,只是定义找到该jar的三维坐标,并不是真正的去执行下载的jar的功能。

    2. plugins和pluginManagement的区别
      plugins :就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。pluginManagement:是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

说明:

  1. maven – 为什么pom.xml的modelVersion是必要的,并且始终设置为4.0.0?
    4.0.0
    它总是设置为4.0.0在Maven 2和3,因为,目前,没有其他模型。
    Notice that modelVersion contains 4.0.0 . That is currently the only supported POM version for Maven 2 and is always required
    但如果有另一个版本的模型,它不一定需要总是设置为4.0.0。 POM必须遵守一个模型。让我们说Maven 4提出了4.1版本。如果你写你的pom符合4.1,它不会与Maven 3和模型4.0.0兼容。
    它被定义为强制性的,可能强制实施特定的XML模型,以便在定义新模型的情况下。

  2. 指定打包后的名字

        
            
            iiot-ident-provider
        


    1.pom.xml文件 - pom.xml说明_第1张图片

plugins 插件:

1.maven-compiler-plugin 插件

maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。
maven的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin插件可以指定项目源码的jdk版本,编译后的jdk版本,以及编码。
详解:Maven中配置maven-compiler-plugin 插件 - 楼兰胡杨 - 博客园

                                                                                                                                      
                                                                               
    org.apache.maven.plugins                                                                                               
    maven-compiler-plugin                                                                                            
    3.1                                                                                                                    
                                                                                                                               
                            
        1.8                                                                                              
        1.8                                                                                      
        UTF-8
        true                                                                             
        true
        true                                                                                                               
        true                                                        
                   
        1.3                                                                         
        128m                                                                                      
        512m                                                                                              
        -verbose -bootclasspath ${java.home}\lib\rt.jar               
                                                                                                                              
 

一般如此就行:

            
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                
            

2.spring-boot-maven-plugin

Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能。
Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。
Spring Boot Maven plugin的最新版本为2017.6.8发布的1.5.4.RELEASE,要求Java 8, Maven 3.2及以后。

  
      
          
              org.springframework.boot
              spring-boot-maven-plugin
              2.0.1.RELEASE
              
              
                  
                      
                          repackage
                      
                  
              
          
      
  

注意:可以指定启动类:spring-boot-maven-plugin插件的作用 - 贾树丙 - 博客园

1.作用:springboot默认使用spring-boot-maven-plugin 来打包,这个插件会将项目所有的依赖打入项目jar 包里面。
spring-boot-maven-plugin插件的作用:
1.pom.xml文件 - pom.xml说明_第2张图片

2.Spring Boot Maven plugin的5个Goals

  1. spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
  2. spring-boot:run,运行Spring Boot应用
  3. spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  4. spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  5. spring-boot:build-info,生成Actuator使用的构建信息文件build-info.properties

3.mvn package spring-boot:repackage说明
Spring Boot Maven plugin的最主要goal就是repackage,其在Maven的package生命周期阶段,能够将mvn package生成的软件包,再次打包为可执行的软件包,并将mvn package生成的软件包重命名为*.original。
基于上述配置,对一个生成Jar软件包的项目执行如下命令:

mvn package spring-boot:repackage  

可以看到生成的两个jar文件,一个是*.jar,另一个是*.jar.original。

 

在执行上述命令的过程中,Maven首先在package阶段打包生成*.jar文件;然后执行spring-boot:repackage重新打包,查找Manifest文件中配置的Main-Class属性,如下所示:

Manifest-Version: 1.0  
Implementation-Title: gs-consuming-rest  
Implementation-Version: 0.1.0  
Archiver-Version: Plexus Archiver  
Built-By: exihaxi  
Implementation-Vendor-Id: org.springframework  
Spring-Boot-Version: 1.5.3.RELEASE  
Implementation-Vendor: Pivotal Software, Inc.  
Main-Class: org.springframework.boot.loader.JarLauncher  
Start-Class: com.ericsson.ramltest.MyApplication  
Spring-Boot-Classes: BOOT-INF/classes/  
Spring-Boot-Lib: BOOT-INF/lib/  
Created-By: Apache Maven 3.5.0  
Build-Jdk: 1.8.0_131  

注意,其中的Main-Class属性值为org.springframework.boot.loader.JarLauncher;

Start-Class属性值为com.ericsson.ramltest.MyApplication。

其中com.ericsson.ramltest.MyApplication类中定义了main()方法,是程序的入口。

通常,Spring Boot Maven plugin会在打包过程中自动为Manifest文件设置Main-Class属性,事实上该属性究竟作用几何,还可以受Spring Boot Maven plugin的配置属性layout控制的,示例如下

注意,其中的Main-Class属性值为org.springframework.boot.loader.JarLauncher;

Start-Class属性值为com.ericsson.ramltest.MyApplication。

其中com.ericsson.ramltest.MyApplication类中定义了main()方法,是程序的入口。

通常,Spring Boot Maven plugin会在打包过程中自动为Manifest文件设置Main-Class属性,事实上该属性究竟作用几何,还可以受Spring Boot Maven plugin的配置属性layout控制的,示例如下

  
  org.springframework.boot  
  spring-boot-maven-plugin  
  1.5.4.RELEASE  
    
    ${start-class}  
    ZIP  
    
    
      
        
        repackage  
        
      
    
 

注意,这里的layout属性值为ZIP。layout属性的值可以如下:

  1. JAR,即通常的可执行jar,Main-Class: org.springframework.boot.loader.JarLauncher
  2. WAR,即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided,Main-Class: org.springframework.boot.loader.warLauncher
  3. ZIP,即DIR,类似于JAR
    1. MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher
    2. NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher
    3. Main-Class: org.springframework.boot.loader.PropertiesLaunche

4.integration-test阶段中的Spring Boot Maven plugin的start/stop

  
  false  
  
  
    
      
      org.apache.maven.plugins  
      maven-failsafe-plugin  
        
        ${it.skip}  
        
      
      
      org.springframework.boot  
      spring-boot-maven-plugin  
      1.5.4.RELEASE  
        
          
          pre-integration-test  
            
            start  
            
            
            ${it.skip}  
            
          
          
          post-integration-test  
            
            stop  
            
            
            ${it.skip}  
            
          
        
      
    
  

注意,it.skip变量用作是否跳过integration-test的标志位。

maven-failsafe-plugin用作integration-test的主要执行目标。

spring-boot-maven-plugin用以为integration-test提供支持。

执行integration-test的Maven命令如下:

mvn verify

或者

mvn verify -Dit.skip=false

参考链接:68. Spring Boot Maven Plugin

Spring Boot Maven Plugin Documentation

Spring Boot Maven Plugin – Spring Boot

Build Tool Plugins

3.maven-dependency-plugin插件

之前介绍了使用spring-boot-maven-plugin插件打jar包,会把所有的依赖文件都导入,然后变成了一个可执行的jar包。这样的不好的地方就是,我实际上并不需要把依赖的jar包也打入到生成的jar包里面去,仅仅需要把当前项目的代码打包。生成的jar包只要能引用到它所依赖的jar包,并且可以执行就好了。

1.pom.xml文件 - pom.xml说明_第3张图片

1.pom.xml文件 - pom.xml说明_第4张图片

作用:这个maven-dependency-plugin依赖的作用就是自动拷贝jar包到target目录(和eclipse  打包 runnable jar file的第三种方式类似 JAVA-打包成jar包_yigg的博客-CSDN博客_java打包成jar包)

参考:Maven项目打Jar包,如何添加依赖 - 贾树丙 - 博客园

4.maven-resources-plugin

作用:拷贝资源文件 到指定的resource目录

			
			
			
			    maven-resources-plugin
			    
			        
			            copy-dependencies
			            package
			            
			                copy-resources
			            
			            
			                
			               ${project.build.directory}/resources
			                
			                    
			                        src/main/resources
			                        true
			                        
			                        
			                            */**
			                        
			                    
			                
			            
			        
			    
			

5.maven-war-plugin插件

作用:Maven打war包时,排除和包含指定文件或目录

参考:maven-war-plugin:Maven打war包时,排除和包含指定文件或目录_琦彦的博客-CSDN博客_packagingexcludes正则表达式

            
                org.apache.maven.plugins
                maven-war-plugin
                3.0.0
                
                    false
                    
                        WEB-INF/lib/common-core-1.0.0.jar,
                        WEB-INF/lib/common-util-1.0.0.jar,
                        WEB-INF/lib/service-api-1.0.0.jar,
                        WEB-INF/lib/iiot-redis-1.0.0.jar,
                        WEB-INF/lib/iiot-amq-1.0.0.jar,
                        WEB-INF/lib/iiot-oss-1.0.0.jar,
                        WEB-INF/lib/iiot-entity-1.0.0.jar,
                        WEB-INF/classes/cn/**,
                        WEB-INF/classes/mapping/**,
                        WEB-INF/classes/*.properties,
                        WEB-INF/classes/*.conf,
                        WEB-INF/jsp/**,
                        static/**
                    
                    
		              
		                cn.rntd.IdentApp
		              
		            
                
            

resources

作用:指定目录为资源目录

        
        
            
            
                src/main/webapp
                META-INF/resources
                
                    **/*.*
                
            
            
                src/main/resources
            
        

maven中的可选依赖true

maven中的可选依赖true_明快de玄米61的博客-CSDN博客_true

你可能感兴趣的:(#,maven,xml,java,maven)