重新学习maven-maven-pom.xml里面所有标签的含义
?这个是maven配置文件的核心配置,详细了解一下pom.xml。
1、<modelVersion>4.0.0</modelVersion>
指定了当前Maven模型的版本号。声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
2、<groupId>asia.banseon</groupId>
一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就 是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的项目名。项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app
3、<artifactId>banseon-maven2</artifactId>
可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式。构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。
4、<packaging>jar</packaging>
项目产生的构件类型,例如jar、war、rar、ear、pom默认是jar。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型
5、<version>1.0-SNAPSHOT</version>
版本号。项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
6、<name>banseon-maven</name>
项目的名称, Maven产生的文档用
7、<url>http://www.baidu.com/banseon</url>
项目主页的URL, Maven产生的文档用
8、<description>A maven project to study maven.</description>
项目的详细描述, Maven 产生的文档用。 当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标 签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。
?
1、<dependencies></dependencies>
This element describes all of the dependencies associated with a
project. These dependencies are used to construct a classpath for your
project during the build process. They are automatically downloaded from the
repositories defined in this project.
项目引入插件所需要的额外依赖
2、<dependency></dependency>
依赖 dependencies和dependency
dependencies包含dependency。Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,所有的依赖都被称为dependency。配置dependency依赖,maven就会根据仓库配置从远程仓库下载jar包到本地仓库。
3、<scope>test</scope>
仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。
4、<version>${mysql.version}</version>
<mysql.version>8.0.17</mysql.version>
版本号,被使用的插件的版本(或版本范围)
?
5、<optional>true</optional>
可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。
?
6、<exclusions> <exclusion> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> </exclusion> </exclusions>
当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题
?
1、<build></build>
构建项目需要的信息
2、<finalName>${project.artifactId}</finalName>
产生的构件的文件名,默认值是${artifactId}-${version}。
3、<extension></extension>
使用来自该项目的一系列构建扩展,是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。
4、<plugins></plugins>
使用的插件列表
5、<plugin></plugin>
描述插件所需要的信息
6、<configuration></configuration>
报表插件的配置
<!--一组报表的多种规范,每个规范可能有不同的配置。一个规范(报表集)对应一个执行目标 。例如,有1,2,3,4,5,6,7,8,9个报表。1,2,5构成A报表集,对应一个执行目标。2,5,8构成B报表集,对应另一个执行目标--> <reportSets> <!--表示报表的一个集合,以及产生该集合的配置--> <reportSet> <!--报表集合的唯一标识符,POM继承时用到--> <id/> <!--产生报表集合时,被使用的报表的配置--> <configuration/> <!--配置是否被继承到的POMs--> <inherited/> <!--这个集合里使用到哪些报表--> <reports/> </reportSet> </reportSets>
6、<fork>true</fork>
用于明确表示编译版本配置有效
7、<skipTests>true</skipTests>
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
一 使用maven.test.skip,不但跳过单元测试的运行,也跳过测试代码的编译。
mvn package -Dmaven.test.skip=true
pom.xml文件中修改
<plugin> <groupId>org.apache.maven.plugin</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <skip>true</skip> </configuration> </plugin>
二 使用 mvn package -DskipTests 跳过单元测试,但是会继续编译;如果没时间修改单元测试的bug,或者单元测试编译错误。使用上面的,不要用这个
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
默认idea的跳过测试采用的是第二种,所以仍然会编译代码,如果想不执行测试用例,也不编译测试用例类,那么必须采用第一种方式在pom中加上skip为true,这样才能跳过编译
?
?
8、<fromFile>target/${pack-name}</fromFile>
是要上传到服务器的文件,一般来说是jar或者war包
9、<url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url>
配置服务器的用户、密码、地址以及文件上传的目录。
10、<commands> <!-- Kill Old Process --> <command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk '{print $2}'`</command> <!-- Restart jar package,write result into log.log --> <command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=test > ${service-path}/log.log 2>&1 & ]]></command> <command><![CDATA[netstat -nptl]]></command> <command><![CDATA[ps -ef | grep java | grep -v grep]]></command> </commands>
启动jar包通常会使用java -jar test.jar命令,可以将命令配置在pom.xml中,杀死,重新启动,写入日志。
?
1、docker配置docker-maven-plugin参数介绍,这个可以查一下单独学一下。
?
1、配置镜像地址
<pluginRepositories></pluginRepositories>发现插件的远程仓库列表,这些插件用于构建和报表,我这里配置的是
结尾:我的项目里面大概就用到这么多,还有什么没有涉及到,或者没有学到呢?