Maven的介绍
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven环境配置
系统要求
JDK1.8
Maven 自身安装需要大约 10 MB 空间。除此之外,额外的磁盘空间将用于你的本地 Maven 仓库。你本地仓库的大小取决于使用情况,但预期至少 500 MB。
Maven下载
下载地址:http://maven.apache.org/download.cgi
windows: apache-maven-3.6.3-bin.zip
Linux: apache-maven-3.6.3-bin.tar.gz
Maven环境配置
Linux环境配置
下载解压并移动到指定目录
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xvf apache-maven-3.6.3-bin.tar.gz
sudo mv -f apache-maven-3.6.3 /usr/local/
编辑 /etc/profile 文件 sudo vim /etc/profile,在文件末尾添加如下代码:
export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=${PATH}:${MAVEN_HOME}/bin
保存文件,并运行如下命令使环境变量生效:
# source /etc/profile
在控制台输入如下命令,如果能看到 Maven 相关版本信息,则说明 Maven 已经安装成功:
# mvn -v
Windows环境配置
-
新建系统变量 MAVEN_HOME
变量名:MAVEN_HOME
变量值:C:\Program Files\apache-maven-3.6.3 (Maven的安装目录,依个人情况而定)
-
编辑系统变量 Path,添加变量值:;%MAVEN_HOME%\bin
-
验证Maven是否已经安装成功
mvn -v
Maven POM
简述
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
文件概述
<?xml version="1.0" encoding="UTF-8"?>
<!--project:工程的根标签-->
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--modelVersion:模型版本需要设置为 4.0-->
<modelVersion>4.0.0</modelVersion>
<!--groupId:公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.chenxbook</groupId>
<!-- artifactId:项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>report-management</artifactId>
<!-- version:版本号 -->
<version>${revision}</version>
<!--packaging: 项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 -->
<packaging>pom</packaging>
<!--name: 项目的名称, Maven产生的文档用 -->
<name>report-management</name>
<!-- description:项目的详细描述-->
<description>Demo project for Spring Boot</description>
<!--功能模块-->
<modules>
<module>report-common</module>
<module>report-system</module>
<module>report-settings</module>
<module>report-parse</module>
<module>report-running-monitor</module>
<module>report-information-center</module>
<module>report-boot-web</module>
</modules>
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<!--版本说明-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<spring-boot.version>2.0.9.RELEASE</spring-boot.version>
<com.alibaba.fastjson>1.2.30</com.alibaba.fastjson>
<org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
<io.springfox.swagger2>2.8.0</io.springfox.swagger2>
<ccom.github.xiaoymin.knife4j.bootstrapui>2.0.1</ccom.github.xiaoymin.knife4j.bootstrapui>
<org.apache.commons.collections4>4.3</org.apache.commons.collections4>
<org.apache.commons.langs>3.8</org.apache.commons.langs>
<org.apache.commons.commons-pool2>2.5.0</org.apache.commons.commons-pool2>
<log4j.version>1.7.12</log4j.version>
<revision>1.0.0</revision>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--公共配置模块-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-common</artifactId>
<version>${project.version}</version>
</dependency>
<!--报表系统管理-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-system</artifactId>
<version>${project.version}</version>
</dependency>
<!--报表设置-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-settings</artifactId>
<version>${project.version}</version>
</dependency>
<!--报表解析-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-parse</artifactId>
<version>${project.version}</version>
</dependency>
<!--报表运行监控-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-running-monitor</artifactId>
<version>${project.version}</version>
</dependency>
<!--报表信息中心-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-information-center</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--dependencies:该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 -->
<dependencies>
<dependency>
<!--依赖的group ID -->
<groupId>org.springframework.boot</groupId>
<!--依赖的artifact ID -->
<artifactId>spring-boot-starter-test</artifactId>
<!--scope:依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
-->
<scope>test</scope>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${com.alibaba.fastjson}</version>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mapstruct -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${io.springfox.swagger2}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${io.springfox.swagger2}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${ccom.github.xiaoymin.knife4j.bootstrapui}</version>
</dependency>
<!-- org.apache.commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${org.apache.commons.collections4}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${org.apache.commons.langs}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${org.apache.commons.commons-pool2}</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
<!--build:构建项目需要的信息 -->
<build>
<!--pluginManagement:子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 -->
<pluginManagement>
<!--plugin元素包含描述插件所需要的信息。 -->
<plugins>
<!--编译插件,指定JDK版本-->
<plugin>
<!--插件在仓库里的group ID -->
<groupId>org.apache.maven.plugins</groupId>
<!--插件在仓库里的artifact ID -->
<artifactId>maven-compiler-plugin</artifactId>
<!--被使用的插件的版本(或版本范围) -->
<version>3.1</version>
<!--configuration:作为DOM对象的配置 -->
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- [Maven多模块结构下版本管理的正确姿势(CI Friendly Versions) - ${revision}]
(https://segmentfault.com/a/1190000019280804?utm_source=tag-newest) -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<!--executions: 是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,
只有在真需要下载时,该元素才被设置成enabled。 -->
<executions>
<!--execution元素包含了插件执行需要的信息 -->
<execution>
<!--id:执行目标的标识符,用于标识构建过程中的目标,
或者匹配继承过程中需要合并的执行目标 -->
<id>flatten</id>
<!--phase:绑定了目标的构建生命周期阶段,如果省略,
目标会被绑定到源数据里配置的默认阶段 -->
<phase>process-resources</phase>
<!--goals:配置的执行目标 -->
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--distributionManagement:项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 -->
<!--[maven中的distributionManagement的作用](https://blog.csdn.net/qq_31924435/article/details/53745811)-->
<!--
<distributionManagement>
<!--部署项目产生的构件到远程仓库需要的信息 -->
<repository>
<id>releases</id>
<url>私服releases地址</url>
</repository>
<!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 -->
<snapshotRepository>
<id>snapshots</id>
<url>私服snapshots地址</url>
</snapshotRepository>
</distributionManagement>-->
</project>
参考资料
Maven 构建生命周期
生命周期
Maven 构建生命周期(Lifecycle )定义了一个项目构建跟发布的过程。
一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
阶段 | 处理 | 描述 |
---|---|---|
验证 validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
编译 compile | 执行编译 | 源代码编译在此阶段完成 |
测试 Test | 测试 | 使用适当的单元测试框架(例如JUnit)运行测试。 |
包装 package | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
Maven三个标准的生命周期
-
clean:项目清理的处理
-
default(或 build):项目部署的处理
-
site:项目站点文档创建的处理
构建阶段由插件目标构成
一个插件目标代表一个特定的任务(比构建阶段更为精细),这有助于项目的构建和管理。这些目标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用执行。这些目标的执行顺序取决于调用目标和构建阶段的顺序。
mvn clean compile -DskipTests package install
Maven 构建配置文件
简述
构建配置文件是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。
使用构建配置文件,你可以为不同的环境,比如说生产环境(Production)和开发(Development)环境,定制构建方式。
配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通过各种方式触发。
配置文件在构建时修改 POM,并且用来给参数设定不同的目标环境(比如说,开发(Development)、测试(Testing)和生产环境(Production)中数据库服务器的地址)。
构建配置文件的类型
类型 | 定义位置 |
---|---|
项目级(Per Project) | 定义在项目的POM文件pom.xml中 |
用户级 (Per User) | 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局(Global) | 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
配置文件激活
配置文件激活实例
假定项目结构如下:
其中在src/main/resources文件夹下有三个用于测试文件:
文件名 | 描述 |
---|---|
application.properties | 如果未指定配置文件时默认使用的配置。 |
application-dev.properties | 当开发配置文件使用时的开发配置。 |
application-jc1.properties | 当集成测试1环境配置文件使用时的测试产配置。 |
配置文件激活
profile 可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个 profile,然后每个 profile 对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-management</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-boot-web</artifactId>
<version>${revision}</version>
<packaging>jar</packaging>
<name>report-boot-web</name>
<description>程序启动入口</description>
<properties>
<java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot + Shiro doGetAuthorizationInfo不生效问题-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-system</artifactId>
</dependency>
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-parse</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro安全框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>${shiro.version}</version>
</dependency>
</dependencies>
<!--Spring Boot 打包配置-->
<build>
<plugins>
<!--打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--Maven打包时,跳过当前项目deploy到Maven私服-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
<!--部署时对配置文件进行特殊处理:
[resource配制include与exclude的关系](https://blog.csdn.net/zhanglixin_1984/article/details/79818979)-->
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>mappers/**</include>
<include>static/**</include>
<include>templates/**</include>
<include>doc/**</include>
<include>logback-spring.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>application.properties</include>
<include>application-${spring.profiles.active}.properties</include>
<include>static/pdf/**/*.properties</include>
</includes>
</resource>
</resources>
</build>
<!--多环境配置-->
<!--profiles:构建配置文件-->
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<build>
<filters>
<filter>${basedir}/src/main/filters/${spring.profiles.active}/profile.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>jc1</id>
<properties>
<spring.profiles.active>jc1</spring.profiles.active>
</properties>
<build>
<filters>
<filter>${basedir}/src/main/filters/${spring.profiles.active}/profile.properties</filter>
</filters>
</build>
</profile>
</profiles>
</project>
clean package -Dmaven.test.skip=true -P dev
dev 为构建配置文件指定的 参数,这个参数通过 -P 来传输,当然,它可以是 prod 或者 normal 这些由你定义的****。
通过Maven设置激活配置文件
打开 %USER_HOME%/.m2 目录下的 settings.xml 文件,其中 %USER_HOME% 代表用户主目录。如果 setting.xml 文件不存在就直接拷贝 %M2_HOME%/conf/settings.xml 到 .m2 目录,其中 %M2_HOME% 代表 Maven 的安装目录。
配置 setting.xml 文件,增加 <activeProfiles>属性:
<settings 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/settings-1.0.0.xsd">
...
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>
执行命令:
clean package -Dmaven.test.skip=true dev
Maven 仓库
Maven 仓库
在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:\Users\macbook\.m2\repository</localRepository>
</settings>
当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
远程仓库
如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.companyname.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
</project>
Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
- 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
- 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
- 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
Maven 阿里云(Aliyun)仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
第二步: pom.xml文件里添加:
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Maven 插件
Maven 有以下三个标准的生命周期:
- clean:项目清理的处理
- default(或 build):项目部署的处理
- site:项目站点文档创建的处理
每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
- 创建 jar 文件
- 创建 war 文件
- 编译代码文件
- 代码单元测试
- 创建工程文档
- 创建工程报告
插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
<code>mvn [plugin-name]:[goal-name]</code>
插件类型
Maven 提供了下面两种类型的插件:
类型 | 描述 |
---|---|
Build plugins | 在构建时执行,并在 pom.xml 的 元素中配置。 |
Reporting plugins | 在网站生成过程中执行,并在 pom.xml 的 元素中配置。 |
下面是一些常用插件的列表:
插件 | 描述 |
---|---|
clean | 构建之后清理目标文件。删除目标目录。 |
compiler | 编译 Java 源文件。 |
surefile | 运行 JUnit 单元测试。创建测试报告。 |
jar | 从当前工程中构建 JAR 文件。 |
war | 从当前工程中构建 WAMaven 构建 Java 项目R 文件。 |
javadoc | 为工程生成 Javadoc。 |
antrun | 从构建过程的任意一个阶段中运行一个 ant 任务的集合。 |
Maven 项目模板
Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。
什么是 archetype?
archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。我们将使用 quickstart 原型插件创建一个简单的 java 应用程序。
Maven 构建 Java 项目
Maven 使用原型 archetype 插件创建项目。要创建一个简单的 Java 应用,我们将使用 maven-archetype-quickstart 插件。
在下面的例子中,我们将在C:\Users\macbook\IdeaProjects 文件夹下创建一个基于 maven 的 java 应用项目。
mvn archetype:generate -DgroupId=com.chenxbook.modules -DartifactId=sample-java -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
各个文件夹说明:
文件夹结构 | 描述 |
---|---|
sample-java | 包含 src 文件夹和 pom.xml |
src/main/java contains | java 代码文件在包结构下(com/chenxboook/modules)。 |
src/main/test contains | 测试代码文件在包结构下(com/chenxboook/modules)。 |
src/main/resources | 包含了 图片 / 属性 文件(在上面的例子中,我们需要手动创建这个结构)。 |
Maven 构建 & 项目测试
进入C:\Users\macbook\IdeaProjects文件夹下,打开 sample-java文件夹。你将看到有一个 pom.xml 文件,代码如下:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chenxbook.modules</groupId>
<artifactId>sample-java</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>sample-java</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
打开命令控制台,跳转到C:\Users\macbook\IdeaProjects目录下,并执行以下 mvn 命令开始构建项目:
mvn clean package
执行完后,我们已经构建了自己的项目并创建了最终的 jar 文件
-
我们给了 maven 两个目标,首先清理目标目录(clean),然后打包项目构建的输出为 jar(package)文件。
-
打包好的 jar 文件可以在sample-java\target 中获得,名称为sample-java-1.0-SNAPSHOT.jar。
-
测试报告存放在 sample-java\target\surefire-reports 文件夹中。
-
Maven 编译源码文件,以及测试源码文件。
-
接着 Maven 运行测试用例。
-
最后 Maven 创建项目包。
java com.chenxbook.modules.App
Maven 引入外部依赖
pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。
<properties>
<com.alibaba.fastjson>1.2.30</com.alibaba.fastjson>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${com.alibaba.fastjson}</version>
</dependency>
</dependencies>
Maven 项目文档
针对sample-java项目中的pom.xml文件添加如下插件:
<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
...
</project>
打开 C:\Users\macbook\IdeaProjects\sample-java文件夹并执行以下 mvn 命令。
mvn site
打开site文件夹。点击 index.html 就可以看到文档了。
Maven 快照(SNAPSHOT)
一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。
举个例子,设想一个团队开发应用的前端,项目为 app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是 data-service(data-service.jar:1.0)。
现在可能出现的情况是开发 data-service 的团队正在进行快节奏的 bug 修复或者项目改进,并且他们几乎每隔一天就要发布库到远程仓库。 现在如果 data-service 团队每隔一天上传一个新版本,那么将会出现下面的问题:
- data-service 团队每次发布更新的代码时都要告知 app-ui 团队。
- app-ui 团队需要经常地更新他们 pom.xml 文件到最新版本。
什么是快照?
快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。 现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。
项目快照 vs 版本
对于版本,如果 Maven 以前下载过指定的版本文件,比如说 data-service:1.0,Maven 将不会再从仓库下载新的可用 的 1.0 文件。若要下载更新的代码,data-service 的版本需要升到1.1。
快照的情况下,每次 app-ui 团队构建他们的项目时,Maven 将自动获取最新的快照(data-service:1.0-SNAPSHOT)。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chenxbook</groupId>
<artifactId>report-management</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>report-management</name>
<description>Demo project for Spring Boot</description>
<!--功能模块-->
<modules>
<module>report-common</module>
<module>report-system</module>
<module>report-settings</module>
<module>report-parse</module>
<module>report-running-monitor</module>
<module>report-information-center</module>
<module>report-boot-web</module>
</modules>
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<!--版本说明-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<spring-boot.version>2.0.9.RELEASE</spring-boot.version>
<com.alibaba.fastjson>1.2.30</com.alibaba.fastjson>
<revision>1.0.0</revision>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--公共配置模块-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--全局依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!--编译插件,指定JDK版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- [Maven多模块结构下版本管理的正确姿势(CI Friendly Versions) - ${revision}]
(https://segmentfault.com/a/1190000019280804?utm_source=tag-newest) -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--[maven中的distributionManagement的作用](https://blog.csdn.net/qq_31924435/article/details/53745811)-->
<!--
<distributionManagement>
<repository>
<id>releases</id>
<url>私服releases地址</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>私服snapshots地址</url>
</snapshotRepository>
</distributionManagement>-->
</project>
Maven自动化构建
自动化构建定义了这样一种场景: 在一个项目成功构建完成后,其相关的依赖工程即开始构建,这样可以保证其依赖项目的稳定。
可以使用两种方式:
-
在 被依赖项目的 pom 文件中添加一个 post-build 目标操作来启动 app-web-ui 和 app-desktop-ui 项目的构建。
-
使用持续集成(CI) 服务器,比如Hudson ,来自行管理构建自动化。
<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>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.6</version>
<configuration>
<debug>true</debug>
<pomIncludes>
<pomInclude>app-web-ui/pom.xml</pomInclude>
<pomInclude>app-desktop-ui/pom.xml</pomInclude>
</pomIncludes>
</configuration>
<executions>
<execution>
<id>build</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
</project>
使用持续集成服务器(CI)
如果使用 CI 服务器更,我们每次的一个新项目,比如说实例中的 app-mobile-ui,添加为依赖 bus-core-api 项目时,开发者就不需要更新 bus-core-api 项目的 pom。Hudson 将会借助 Maven 的依赖管理功能实现工程的自动化创建。
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
可传递性依赖发现
一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。
Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。
我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。
通过可传递性的依赖,所有被包含的库的图形会快速的增长。当有重复库时,可能出现的情形将会持续上升。Maven 提供一些功能来控制可传递的依赖的程度。
功能 | 功能描述 |
---|---|
依赖调节 | 决定当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。 如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用。 |
依赖管理 | 直接的指定手动创建的某个版本被使用。例如当一个工程 C 在自己的依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用的版本。 |
依赖范围 | 包含在构建过程每个阶段的依赖。 |
依赖排除 | 任何可传递的依赖都可以通过 “exclusion” 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”。 |
依赖可选 | 任何可传递的依赖可以被标记为可选的,通过使用 “optional” 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。 |
依赖范围
传递依赖发现可以通过使用如下的依赖范围来得到限制:
范围 | 描述 |
---|---|
编译阶段 | 该范围表明相关依赖是只在项目的类路径下有效。默认取值。 |
供应阶段 | 该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。 |
运行阶段 | 该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。 |
测试阶段 | 该范围表明相关依赖只在测试编译阶段和执行阶段。 |
系统阶段 | 该范围表明你需要提供一个系统路径。 |
导入阶段 | 该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。 |
依赖管理
通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。 接下来的一个例子可以帮助你更好的理解这个概念。
Maven 聚合(modules标签)与继承(parent标签)
report-management:pom.xml (父模块)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chenxbook</groupId>
<artifactId>report-management</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>report-management</name>
<description>Demo project for Spring Boot</description>
<!--功能模块-->
<modules>
<module>report-common</module>
<module>report-boot-web</module>
</modules>
<!--版本说明-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<revision>1.0.0</revision>
</properties>
<dependencyManagement>
<dependencies>
<!--公共配置模块-->
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
report-common : pom.xml (子模块) ,继承report-management模块
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-management</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-common</artifactId>
<version>${revision}</version>
<name>report-common</name>
<description>公共配置模块</description>
<properties>
<java.version>1.8</java.version>
</properties>
</project>
report-web : pom.xml (子模块) ,继承report-management模块,依赖report-common模块
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-management</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.chenxbook</groupId>
<artifactId>report-boot-web</artifactId>
<version>${revision}</version>
<packaging>jar</packaging>
<name>report-boot-web</name>
<description>程序启动入口</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.chenxbook</groupId>
<artifactId>report-common</artifactId>
</dependency>
</dependencies>
</project>
Maven 自动化部署
项目开发过程中,部署的过程包含需如下步骤:
- 将所的项目代码提交到 Git 或者代码库中并打上标签。
- 从 Git上下载完整的源代码。
- 构建应用。
- 存储构建输出的 WAR 或者 EAR 文件到一个常用的网络位置下。
- 从网络上获取文件并且部署文件到生产站点上。
- 更新文档并且更新应用的版本号。
Maven Web 应用
创建 Web 应用
我们可以使用 maven-archetype-webapp 插件来创建一个简单的 Java web 应用。
打开命令控制台,进入到C:\Users\macbook\IdeaProjects文件夹,然后执行以下的 mvn 命令:
mvn archetype:generate -DgroupId=com.chenxbook.modules -DartifactId=sample-java -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
Maven 目录结构是标准的,各个目录作用如下表所示:
文件夹结构 | 描述 |
---|---|
sample-java | 包含 src 文件夹和 pom.xml 文件。 |
src/main/webapp | 包含 index.jsp 文件和 WEB-INF 文件夹. |
src/main/webapp/WEB-INF | 包含 web.xml 文件 |
src/main/resources | 包含图片、properties资源文件。 |
构建 Web 应用
进入到C:\Users\macbook\IdeaProjects\sample-java文件夹下,执行以下命令:
mvn clean package
部署 Web 应用
将C:\Users\macbook\IdeaProjects\sample-java\target\sample-java.war复制到你的 web 服务器的 web 应用目录,然后重启 web 服务器。
测试 Web 应用
访问以下 URL 运行 web 应用:
http://localhost:8080/sample-java/
Maven IntelliJ
IntelliJ IDEA 目前使用版本2018.3.6、2020.1旗舰版(ultimate edition)
IntelliJ IDEA 的一些特性列出如下:
-
可以通过 IntelliJ IDEA 来运行 Maven 目标。
-
可以在 IntelliJ IDEA 自己的终端里查看 Maven 命令的输出结果。
-
可以在 IDE 里更新 Maven 的依赖关系。
-
可以在 IntelliJ IDEA 中启动 Maven 的构建。
-
IntelliJ IDEA 基于 Maven 的 pom.xml 来实现自动化管理依赖关系。
-
IntelliJ IDEA 可以通过自己的工作区解决 Maven 的依赖问题,而无需安装到本地的 Maven 仓库,虽然需要依赖的项目在同一个工作区。
-
IntelliJ IDEA 可以自动从远程 Maven 仓库上下载需要的依赖和源码。
-
IntelliJ IDEA 提供了创建 Maven 项目,pom.xml 文件的向导。
IDEA中Maven配置
在 IntelliJ IDEA 里创建一个新的项目
使用新建项目向导来导入一个 Maven 项目。
- 打开 IntelliJ IDEA。
- 选择 File Menu > New Project 选项。
- 选择 import project from existing model 选项。
Maven Helper插件
插件的安装与使用
冲突解决
关键博文
- Spring-boot构建多模块依赖工程时,maven打包异常:程序包xxx不存在
- spring boot不用parent引入,采用dependencyManagement引入后的坑
- maven中使用dependencyManagement的好处
- maven dependencyManagement和dependencies的区别
- spring cloud & spring boot 全家桶 & maven 标签 dependencyManagement
- idea 发布jar 到私服_开发工具_everythingss的博客-CSDN博客
- Maven全局配置文件settings.xml详解
settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--本地仓库地址-->
<localRepository>C:\Users\macbook\.m2\repository</localRepository>
<pluginGroups/>
<!--用来配置不同的代理-->
<proxies/>
<!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 -->
<servers>
<server>
<!--这是server的id(注意不是用户登陆的id),
该id与distributionManagement中repository元素的id相匹配。 -->
<id>releases</id>
<!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
<username>账号</username>
<!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。-->
<password>密码</password>
</server>
<server>
<id>snapshots</id>
<username>账号</username>
<password>密码</password>
</server>
</servers>
<!--用于定义一系列的远程仓库的镜像-->
<mirrors>
<!--
<mirror>
<id>dev</id>
<mirrorOf>*</mirrorOf>
<name>jy dev</name>
<url>${public.repo}</url>
</mirror>
-->
<!-- 给定仓库的下载镜像。 -->
<mirror>
<!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>alimaven</id>
<!-- 镜像名称 -->
<name>aliyun maven</name>
<!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<!-- 被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!--根据环境参数来调整构建配置的列表-->
<profiles>
<profile>
<!-- profile的唯一标识 -->
<id>dev</id>
<activation>
<!--activeByDefault:当其值为true的时候表示如果没有其他的profile处于激活状态的时候,该profile将自动被激活。-->
<activeByDefault>true</activeByDefault>
</activation>
<!-- 扩展属性列表 -->
<properties>
<releases.repo>releases地址</releases.repo>
<snapshots.repo>snapshots地址</snapshots.repo>
<public.repo>镜像访问地址</public.repo>
</properties>
<!-- 远程仓库列表 -->
<repositories>
<repository>
<id>jy</id>
<name>central Repository</name>
<url>${public.repo}</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件仓库列表 -->
<pluginRepositories>
<pluginRepository>
<id>jy</id>
<url>${public.repo}</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--激活私服配置-->
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>