史上最全的 pom.xml 文件详解:史上最全的 pom.xml 文件详解_雨雾清影的博客-CSDN博客_pom.xml
参考:Maven的pom.xml文件详解------Build Settings_tomato__的博客-CSDN博客_pom中build
dependencies和dependencyManagement以及plugins和pluginManagement的区别
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的功能。
plugins和pluginManagement的区别
plugins :就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。pluginManagement:是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。
maven – 为什么pom.xml的modelVersion是必要的,并且始终设置为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模型,以便在定义新模型的情况下。
指定打包后的名字
iiot-ident-provider
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
UTF-8
true
true
true
true
1.3
128m
512m
-verbose -bootclasspath ${java.home}\lib\rt.jar
一般如此就行:
maven-compiler-plugin
1.8
UTF-8
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插件的作用:
2.Spring Boot Maven plugin的5个Goals
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属性的值可以如下:
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
之前介绍了使用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包,如何添加依赖 - 贾树丙 - 博客园
作用:拷贝资源文件 到指定的resource目录
maven-resources-plugin
copy-dependencies
package
copy-resources
${project.build.directory}/resources
src/main/resources
true
*/**
作用: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
作用:指定目录为资源目录
src/main/webapp
META-INF/resources
**/*.*
src/main/resources
maven中的可选依赖