文章目录
1. POM文件常用内容
- 自己的坐标信息以及父工程信息(parent)
- 属性(properties)
- 多版本控制(profiles)
- 依赖版本控制(dependencyManagement)
- 依赖注入(dependencies)
- 上传仓库配置(distributionManagement)
- 仓库配置(repositories,pluginRepositories)
- 构建(build)
- 资源配置(resources)
- 插件(plugins)
2. 自己的坐标信息以及父工程信息
2.1 自己的坐标信息
创建完项目会自己创建出来
<groupId>xyz.hlh</groupId>
<artifactId>maven-Demo2</artifactId>
<version>1.0-SNAPSHOT</version>
2.2 父工程信息
如果有父工程,可以配置
<!-- 父工程信息 -->
<parent>
<groupId>xyz.hlh</groupId>
<artifactId>maven-Demo1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
3. 属性
3.1 自定义属性
自定义属性,最多的就是定义jar包版本,下面掉调用。统一管理
<properties>
<!-- 管理jdk,编译jdk版本 -->
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<!-- 自定义属性 一般配置jar包版本号,统一管理,下面调用 -->
<mybatis.version>3.5.7</mybatis.version>
<spring-boot.version>2.5.3</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/mybatis-3.5.7.jar</systemPath>
</dependency>
</dependencies>
3.2 内置属性
Maven提前设置好的属性,直接使用即可
${basedir} 项目根目录
${version} 当前项目版本
3.3 setting
使用Maven配置文件Setting.xml中的标签属性,用于动态配置
${settings.localRepository}
3.4 java系统属性
读取Java系统属性
${user.home}
3.5 环境变量属性
使用Maven配置文件setting.xml中的标签属性,用于动态配置
${env.JAVA_HOME}
4. 版本管理
4.1 工程版本
- SNAPSHOT(快照版本)
- 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
- 快照版本会随着开发的进展不断更新
- RELEASE(发布版本)
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
4.2 工程版本号约定
约定规范:
- <主版本>.<次版本>.<增量版本>.<里程碑版本>
- 主版本:表示项目重大架构的变更,如:spring5相较于spring4的迭代
- 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞
- 增量版本:表示有重大漏洞的修复
- 里程碑版本:表示一个版本的里程碑,往往表示不是非常稳定,还需要很多测试。
范例:
- 5.1.9.RELEASE
并不是每一个版本号都会拥有这四个部分,一般来说,主版本和次要版本都会声明,但是增量版本和里程碑就不一定了。
5. 多版本控制
5.1 多版本兼容
一个工程一般都有多个环境,不同的环境有不同的配置文件,激活那个配置文件可以通过profiles结合activation进行控制
<profiles>
<!-- dev环境 -->
<profile>
<id>dev</id>
<!--设置默认启动-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<!-- dev环境的变量 -->
<properties>
<profile.active>dev</profile.active>
</properties>
</profile>
<!-- pro环境 -->
<profile>
<id>pro</id>
<!-- pro环境的变量 -->
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
<!-- test环境 -->
<profile>
<id>test</id>
<!-- test环境的变量 -->
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
</profiles>
使用:会根据当前默认的环境读取配置信息
${profile.active}
4. 依赖版本控制
通过dependencyManagement
限制本项目以及子项目的jar包版本
<dependencyManagement>
<dependencies>
<!-- springboot 的依赖工程 pom类型 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
</dependencyManagement>
5. 依赖注入
通过dependencies
标签统一完成项目总的jar包(依赖)管理
<dependencies>
<!-- mybatis 因为上面对mybatis做了版本控制,所以这不用标识version -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>
6. 仓库配置
通过repositories
和pluginRepositories
设置远程仓库和远程插件仓库,用于下载jar包
<repositories>
<!-- 阿里云远程仓库 -->
<repository>
<id>aliyun_maven</id>
<name>阿里云仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 是否从此仓库下载正式版 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载快照版,不稳定 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件远程仓库 -->
<pluginRepositories>
<!-- 阿里云远程仓库 -->
<pluginRepository>
<id>aliyun_maven</id>
<name>阿里云仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 是否从此仓库下载正式版 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载快照版,不稳定 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
通过distributionManagement
配置私服仓库,用于配置上传的仓库
<distributionManagement>
<!-- 指定私服地址,发布的仓库地址,多个仓库根据仓库类型,自动上传到指定类型的仓库 -->
<repository>
<id>MyMaven</id>
<name>MyMaven</name>
<url>http://192.168.10.31:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>MyMaven</id>
<name>MyMaven</name>
<url>http://192.168.10.31:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
7. 资源配置
在Idea中,默认值吧resource下的静态文件打包到根目录,比如xml,配置文件之类的。放到src/main/java下的文件不会打包,可以通过build下的resources
规定静态文件打包的位置
<build>
<resources>
<!-- 吧lib下的包打包放到lib目录下 -->
<resource>
<!-- 要打包的目录 -->
<directory>lib/</directory>
<!-- 包含所有的jar -->
<includes>
<include>**/*.jar</include>
</includes>
<!-- 打包完放到那 -->
<targetPath>lib/</targetPath>
</resource>
<!-- 打包所有的yml -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!-- 排除项目 -->
<excludes>
<exclude></exclude>
</excludes>
</resource>
</resources>
</build>
8. 常见插件配置
在build下的plugins
中可以声明多个插件。Maven的插件有很多,包括编译插件、源码打包插件、生成jar包、生成war包,tomcat插件、springboot启动插件等等
-
maven编译插件
<build> <plugins> <!-- maven 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> <showWarnings>true</showWarnings> </configuration> </plugin> </plugins> </build>
-
源码打包
<build> <plugins> <!-- 源码打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.1</version> <!-- 进行package命令时就可以将源码同时进行打包 --> <!-- 所以我们需要绑定source插件到我们default生命周期的package阶段 --> <executions> <execution> <!-- 定义一个阶段,这个阶段是package --> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
-
生成jar包
下面这个是打包成jar包,但是吧所有的jar包依赖和配置文件都单独打出来,方便在服务器上修改配置文件
<properties> <!-- 管理jdk,编译jdk版本 --> <java.version>11</java.version> <!-- 启动类目录 --> <main-class>com.study.maven.newbee.NewbeeApplication</main-class> <!-- lib目录前缀 --> <classpathPrefix>app_lib/</classpathPrefix> <!-- 单独打包所有的依赖,放到指定目录 --> <outputDirectory>${project.basedir}/target/app_lib</outputDirectory> </properties> <build> <plugins> <!-- maven依赖打包 jar包单独打出来 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- 项目编译目录target --> <outputDirectory>${outputDirectory}</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <!-- 生成jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <!-- lib目录前缀 --> <classpathPrefix>${classpathPrefix}</classpathPrefix> <!-- 启动类全限定类名 --> <mainClass>${main-class}</mainClass> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <!-- 把这些配置文件独立出去,静态文件,可以随时更改。如果是部署,可以排除。如果是打包到私服,不要排除,根据具体场景来定 --> <excludes> <exclude>public/**</exclude> <exclude>static/**</exclude> <exclude>*.xml</exclude> <exclude>*.yml</exclude> <exclude>*.properties</exclude> </excludes> </configuration> </plugin> </plugins> </build>
-
生成war包
<build> <plugins> <!-- 生成war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> <configuration> <warSourceDirectory>webapp</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
-
tomcat插件
<build> <plugins> <!-- tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> <uriEncoding>UTF-8</uriEncoding> <server>tomcat7</server> </configuration> </plugin> </plugins> </build>
-
springboot启动插件
<properties> <spring-boot.version>2.5.3</spring-boot.version> </properties> <build> <plugins> <!-- springboot启动插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> </plugin> </plugins> </build>
-
跳过测试
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
9. Maven常见命令
正如Idea中的Lifecycle中的命令,也就是maven的生命周期
-
clear
清理,会把target中的内容清楚
-
validate
验证工程是否正确,所需的信息是否完整
-
compile
将项目编译到target中,但是不打包,不生成jar文件
-
test
测试,调用所有的测试类,测试通过才会进行下一步打包
-
package
将项目中的内容打包到target目录
-
verify
检查,检查package是否有效,符合标准
-
install
将package安装到本地仓库,让其他项目依赖
-
deploy
将最终的包复制到远程的仓库,以让其他开发人员于项目共享
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68303.html