Maven的pom.xml配置
pom项目标签
例子:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.liwinal</groupId>
<artifactId>development</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
解释:
<!--指的是Pom模型的Maven版本-->
<modelVersion>4.0.0</modelVersion>
<!--定义当前项目属于哪个组;group公司或组织域名倒序+项目名-->
<groupId>cn.liwinal</groupId>
<!--maven项目在组中的唯一标识;artifact模块名-项目名-->
<artifactId>development</artifactId>
<!--里程碑版本;version版本,SNAPSHOT是开发版-->
<version>1.0-SNAPSHOT</version>
<!--为pom时在maven install时不会生成jar/war压缩包-->
<packaging>pom</packaging>
<packaging>jar</packaging>
<packaging>war</packaging>
例
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.2</version>
<classifier>jdk15-javadoc</classifier>
打包后就是json-lib-2.2.2-jdk15-javadoc.jar,用于区分不同JDK版本或区分项目的不同组成部分,例如,源代码、javadoc、类文件等。
version
版本组成:
<主版本号>.<次版本号>.<增量版本/修订版本号> - <里程碑版本号>
例如:1.0-SNAPSHOT的主版本为1,次版本为0,里程碑版本为SNAPSHOT
解释:
主版本: 表示项目的重大架构变化。如struts2和struts1采用不同的架构。
次版本: 较大范围功能增加和变化,及bug修复,并且不涉及到架构变化的。
增量版本:表示重大bug的修复,如果发现项目发布之后,出现影响功能的bug,及时修复,则应该是增量版本的变化。
里程碑版本:往往表示某个版本的里程碑,经常见到snapshot,另外还有alpha、beta,比如:1.0-SNAPSHOT、3.0-alpha-1、1.1.2-beta-2。
里程碑版本
例子:1.7、1.0-SNAPSHOT、1.1-release、2.3-alpha
snapshot:表示快照版,它不是个稳定版本,属于开发过程中使用的版本
进入测试阶段,会将里程碑版本号的SNAPSHOT替换成alpha或beta,即测试版本。
alpha:内部测试,只能内部
beta:外部测试
α、β、λ 常用来表示软件测试过程中的三个阶段。
-- α(alpha) 是第一阶段,一般只供内部测试使用;
-- β(beta)是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存
在缺陷和漏洞,一般只提供给特定的用户群来测试使用;
-- λ(lambda)是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的
优化处理即可上市发行。
release:稳定版本
Alpha:软件或系统的内部测试版本,会有很多Bug,仅内部人员使用
Beta:软件或系统的测试版本,这一版本通常是在Alpha版本后,会有很多新功能,
同时也有不少Bug
Gamma:软件或系统接近于成熟的版本,只需要做一些小的改进就能发行
RC(Release Candidate):候选版本,这一版本不会增加新功能,多要进行Debug
GA(General Available):正式发布版本,这个版本就是正式的版本
版本变化顺序:
1.0-SNAPSHOT--->1.0-alpha--->1.0-beta--->1.0-RC--->1.0--->1.1-SNAPSHOT--->...
parent标签
例子:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/>
</parent>
解释:
<!--父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<!-- lookup parent from repository 父pom的路径,如果为空则直接到仓库中查找,顺序为:relativePath元素中的地址–本地仓库–远程仓库 -->
<relativePath/>
</parent>
relativePath
1.默认我们不用写<relativePath>,那默认值就是 ../pom.xml,会从本地路径中获取parent的pom
例:
<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
</parent>
2.设定一个空值将始终从仓库中获取,不从本地路径获取。
例:
<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
<relativePath/>
</parent>
3.指定本地的路径,从本地路径获取parent的pom。
例:<relativePath>某个pom的路径<relativePath/>:
<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
<relativePath>***<relativePath/>
</parent>
properties标签
例子:
<properties>
<spring-boot.version>2.3.5.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
解释:
设置版本号
modules标签
例子:
<modules>
<module>my-study-development</module>
</modules>
解释:
子模块
module对应的是子模块的artifactId
repositories标签
放<project>标签中,可以添加多个<repository>,用来引入其他maven的下载地址。
<repositories>
<repository>
<!--远程仓库唯一标识符 -->
<id>com.e-iceblue</id>
<!--设置为了“*”,意味所有的依赖都是从这个镜像上下载 -->
<mirrorOf>*</mirrorOf>
<!--描述 -->
<name>e-iceblue</name>
<!--远程仓库url -->
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
<!--以下属于非必要项,可以不填 -->
<layout>default</layout>
<!--告诉Maven可以从这个仓库下载releases版本的构件-->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<!--如果是false则为:告诉Maven不要从这个仓库下载snapshot版本的构件-->
<enabled>true</enabled>
<!-- 这里指定更新策略 -->
<!-- always、daily、interval、never -->
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
mirrorOf 的其他解释:
*:所有依赖;
external:*:所有不再本地和不是基于文件的依赖;
repo,repo1:所有来自repo或者repo1仓库的依赖;
*,!repo1:除了repo1外的所有依赖。即上面示例中的场景。
dependencies标签
例子:
<dependencies>
<!--web 模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
解释:
导入依赖包,常用包查看附录三:常用仓库。
exclusions表示去除这个包
scope默认值为compile,表示编译和打包需要次类库
test表示仅仅单元测试需要用到
provided表示编译用到,但打包不需要
runtime表示编译打包不需要,但运行时需要
比如数据库编译和打包不需要,但测试运行时需要就用runtime
dependencyManagement
应用场景:当一个maven项目想继承多个父模块时使用。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.3.RELEASE</version>
<!-- 默认是jar表示引入的是jar包,pom表示引入的是父模块 -->
<type>pom</type>
<!-- import表示将父模块的jar包引入进来 -->
<scope>import</scope>
<!--<type>pom</type><scope>import</scope>,这种方式只能用在<dependencyManagement></dependencyManagement>中-->
</dependency>
</dependencies>
</dependencyManagement>
父项目用了这个标签之后,它的子项目的依赖就不用再写版本号了
distributionManagement标签
Snapshot快照仓库用于保存开发过程中的不稳定版本
Release正式仓库则是用来保存稳定的发行版本
<!--发布包配置-->
<distributionManagement>
<repository>
<id>定义的id</id>
<name>远程仓库的名字</name>
<!-- releases库的地址 -->
<url>http://XXXX/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>定义的id</id>
<name>远程仓库的名字</name>
<!-- snapshot库的地址 -->
<url>http://XXXX/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
setting
<services>
<server>
<id>这里的id跟上述的pom的id要一一对应</id>
<username>你私服的用户名</username>
<password>密码</password>
</server>
<server>
同上
</server>
</servers>
定义一个组件/模块为快照版本,只需要在pom.xml文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写)
例:
<groupId>com.xupp</groupId>
<artifactId>test</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>nexus-releases</name>
<!--指向仓库类型为host(宿主仓库)的储存类型为Release的仓库-->
<url>http://192.168.1.185:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>nexus-snapshots</name>
<!--指向仓库类型为host(宿主仓库)的储存类型为Snapshot的仓库-->
<url>http://192.168.1.185:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
build标签
例子:
<build>
<finalName>${project.name}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
解释:
插件配置
finalName:自定义打包后的项目名,默认是artifactId+version
上传到远程maven仓
第一步:修改maven的setting文件
setting配置
<services>
<server>
<!-- releases库的设置 -->
<id>这里的id跟下面的pom的id要一一对应</id>
<username>你私服的用户名</username>
<password>密码</password>
</server>
<server>
<!-- snapshot库的设置 -->
<id>这里的id跟下面的pom的id要一一对应</id>
<username>你私服的用户名</username>
<password>密码</password>
</server>
</servers>
第二步:修改maven项目中的pom.xml
使用distributionManagement标签
Snapshot快照仓库用于保存开发过程中的不稳定版本
Release正式仓库则是用来保存稳定的发行版本
<!--发布包配置-->
<distributionManagement>
<repository>
<id>定义的id</id>
<name>远程仓库的名字</name>
<!-- releases库的地址 -->
<url>http://XXXX/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>定义的id</id>
<name>远程仓库的名字</name>
<!-- snapshot库的地址 -->
<url>http://XXXX/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
从远程maven仓库下载
setting设置
<!-- 下载jar包配置 -->
<profile>
<!--profile的id -->
<id>dev</id>
<repositories>
<repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
<id>nexus</id> <!--仓库地址,即nexus仓库组的地址 -->
<url>http://121.4.56.246:8099/repository/hapi-host-release/</url> <!--是否下载releases构件 -->
<releases>
<enabled>true</enabled>
</releases> <!--是否下载snapshots构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://121.4.56.246:8099/repository/hapi-host-release/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- 添加以下配置进行激活上面的配置 -->
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
https://blog.csdn.net/tanga842428/article/details/71249067
pom.xml设置
<repositories>
<repository>
<id>nexus</id><!--远程仓库唯一标识符 -->
<name>Private Repository</name><!--描述 -->
<!--远程仓库url -->
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
标签说明:
repositorys:repositories标签的作用是用来配置maven项目的远程仓库;
repository:repositories标签下可以有很多个repository,每个repository都有唯一id;
layout:用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留);
releases-->enabled:如果为true表示告诉Maven可以从这个仓库下载releases版本的构件,false表示不能;
snapshots-->enabled: 如果为false表示告诉Maven不要从这个仓库下载snapshot版本的构件,true表示能;
禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用 。
配置本地仓库
setting配置
本地仓库地址
D:\ideadownload\maven\apache-maven-3.6.1\conf\settings.xml文件下的
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\ideadownload\maven\apache-maven-3.6.1\repository</localRepository>
默认在c盘
配置maven拉取镜像
setting设置
更改下载镜像
<mirrors>
<mirror>
<id>gloryview</id>
<mirrorOf>central</mirrorOf>
<url>http://192.168.1.185:8081/repository/maven-public/</url>
</mirror>
</mirrors>
build标签下载插件
springboot打包插件
引入配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
插件说明

build-info:生成项目的构建信息文件 build-info.properties
repackage:这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的 jar,同时将 mvn package 生成的 jar 重命名为 *.origin
run:这个可以用来运行 Spring Boot 应用
start:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
stop:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
指定jdk编译版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configration>
<source>8</source>
<target>8</target>
</configration>
</plugin>
</plugins>
</build>
运行: java -jar 包文件名.jar
跳过测试用例
<!--
在工作中,很多情况下我们打包是不想执行测试用例的
可能是测试用例不完事,或是测试用例会影响数据库数据
跳过测试用例执
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--跳过项目运行测试用例-->
<skipTests>true</skipTests>
</configuration>
</plugin>
附录一:maven的setting参数
附录二:pom的参数
附录三:常用仓库
mongoDB包
springboot整合
<!--SpringBoot整合MongoDB-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--MongoDB相关依赖-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.9.1</version>
</dependency>
直连包
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
springBoot包
springboot项目包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
启动包
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
web启动器
<!--web 启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
redis
<!-- redis基础-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
mybatis-plus
<!--mybatisplus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
spring-boot-dependencies
作用是约束版本,里面声明了很多springboot的版本号。 spring-cloud-dependencies和spring-cloud-alibaba-dependencies则是去声明cloud和cloud-alibaba组件的版本 。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
type和scope的作用就是为了解决maven单继承的问题
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
springboot集成swagger
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
springboot热部署
修改配置文件后会自动重新加载,再编译一下就行,ctrl+F9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
springboot-aop
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
单元测试包
<!-- 测试启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
mysql包
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
cron包
<!-- cron转换date -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
lombok包
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
hutool包
<!-- https://hutool.cn/docs/#/-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.6</version>
</dependency>
附录四:常用maven命令
mvn compile
编译Maven工程,编译主程序,会生成target目录
mvn test-compile
编译测试程序
mvn package
编译并打包生成jar/war等文件
※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!
mvn install
打包并安装到本地仓库。如果这个项目是一个基础类库,本地其他项目也需要用到则需要安装到本地仓库
mvn deploy
同install,但打包并同时安装到远程仓库
mvn clean
删除target目录
mvn test
执行测试,并生成测试报告
mvn deploy
将打包的文件发布到远程参考,供其他开发人员下载
mvn install
将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn site
生成项目相关信息的网站
查看版本
mvn -v
显示版本信息
mvn –version
配置环境变量
path下面加maven的bin目录
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat:run 在tomcat容器中运行web应用
mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
附录五:Could not find artifact(本地仓库确实存在)
第一步:从本地关联jar包。

第二步:勾选Always update snapshot(更新快照)


浙公网安备 33010602011771号