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


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-8true                                                                             truetrue                                                                                                               true                                                                   1.3                                                                         128m                                                                                      512m                                                                                              -verbose -bootclasspath ${java.home}\lib\rt.jar                                                                                                                                         
 

一般如此就行:

            maven-compiler-plugin1.81.8UTF-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.bootspring-boot-maven-plugin2.0.1.RELEASErepackage

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

1.作用:springboot默认使用spring-boot-maven-plugin 来打包,这个插件会将项目所有的依赖打入项目jar 包里面。
spring-boot-maven-plugin插件的作用:

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包,并且可以执行就好了。

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

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

4.maven-resources-plugin

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

			maven-resources-plugincopy-dependenciespackagecopy-resources${project.build.directory}/resourcessrc/main/resourcestrue*/**

5.maven-war-plugin插件

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

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

            org.apache.maven.pluginsmaven-war-plugin3.0.0falseWEB-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/webappMETA-INF/resources**/*.*src/main/resources

maven中的可选依赖true

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部