maven的配置文件主要有 settings.xml 和pom.xml 两个文件。
其中在maven安装目录下的settings.xml,如:D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件
用户目录的.m2子目录下的settings.xml,如:C:\Users\chenxc.m2\settings.xml 配置只是针对当前用户的配置文件
项目根路径下的pom.xml主要是对当前项目的配置。
局部配置优先于全局配置。 配置优先级从高到低:pom.xml> user settings > global settings
该值是此构建系统的本地存储库的路径。默认值为 ${user.home}/.m2/repository
。此元素对于主构建服务器特别有用,允许所有登录用户从公共本地存储库进行构建。
<localRepository>D:\repositorylocalRepository>
表示是否可以和用户交互以获得输入,默认为true。
<interactiveMode>trueinteractiveMode>
表示此构建系统是否应在离线模式下运行,则默认为false。 此元素对于由于网络设置或安全原因而无法连接到远程存储库的构建服务器非常有用。
<offline>falseoffline>
插件组,该元素包含一个元素列表pluginGroup
,每个元素包含一个groupId。当使用插件且命令行中未提供 groupId 时,将搜索该列表。该列表默认包含 org.apache.maven.plugins
和org.codehaus.mojo
。
<pluginGroups>
<pluginGroup>org.eclipse.jettypluginGroup>
pluginGroups>
如下,在pom文件中没有设置
,那么将会从
列表中指定的位置搜索插件
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>
私服服务器配置,配置私服的用户名和密码。配置的私服服务器可以用来发布jar包,与pom 中 distributionManagement
标签中配置的仓库ID相互对应。
<servers>
<server>
<id>server001id>
<username>my_loginusername>
<password>my_passwordpassword>
<privateKey>${user.home}/.ssh/id_dsaprivateKey>
<passphrase>some_passphrasepassphrase>
<filePermissions>664filePermissions>
<directoryPermissions>775directoryPermissions>
<configuration>configuration>
server>
servers>
id :该id与
中
元素的
相匹配(注意不是用户登陆的id)。
如下,在pom文件中设置的
中
元素的
要与settings.xml文件中
的
值一致才能匹配的上。
<distributionManagement>
<repository>
<id>server001id>
<url>http://121.***.***.51:1481/repository/maven/url>
repository>
distributionManagement>
username、password:这两元素以一对形式出现,表示向该服务器进行身份验证所需的登录名和密码。
privateKey、passphrase:与前两个元素一样,指定了一个私钥位置(默认是${user.home}/.ssh/id_dsa
)以及私钥密码(私钥密码可以没有)。将来
和
元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。
filePermissions、DirectoryPermissions:在部署时创建存储库文件或目录时,这些是要使用的权限。每个的合法值都是与 unix 文件权限相对应的三位数,例如 664 或 775。
注意:如果您使用私钥
登录服务器,请确保没有填写
元素。否则
将被忽略。
密码加密
2.1.0+ 中添加了一项新功能 - 服务器密码和密码加密。请参阅此页面的详细信息
<mirrors>
<mirror>
<id>planetmirror.comid>
<name>PlanetMirror Australianame>
<url>http://downloads.planetmirror.com/pub/maven2url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
部分选择相应的凭据。*
匹配所有存储库 ID。external:*
匹配除使用本地主机或基于文件的存储库之外的所有存储库。当您想要排除为集成测试定义的重定向存储库时,可以使用此选项。external:http:*
匹配除使用 localhost 之外的所有使用 HTTP 的存储库。repo,repo1
= repo 或 repo1!
可以与上述通配符之一结合使用以排除存储库 ID,如!repo1
除 repo1 之外的所有内容注意:给定存储库最多可以有一个镜像。换句话说,您无法将单个存储库映射到一组全部定义相同
值的镜像。Maven 不会聚合镜像,而只是选择第一个匹配项。
<proxies>
<proxy>
<id>myproxyid>
<active>trueactive>
<protocol>httpprotocol>
<host>proxy.somewhere.comhost>
<port>8080port>
<username>proxyuserusername>
<password>somepasswordpassword>
<nonProxyHosts>*.google.com|ibiblio.orgnonProxyHosts>
proxy>
proxies>
元素。protocol://host:port
分别为代理的协议,主机,端口元素。setting.xml文件中的
是pom中的
的其中一部分,
里包含
、
、
、
这四个主要元素。因为它们关注的是整个构建系统(这就是settings.xml文件的作用),而不是单个项目对象模型设置。如果一个settings.xml中的
被激活,它的值会覆盖任何其它定义在pom中带有相同id的
。
>
>
>test >
...
>
>
是用来确定该
是否被激活使用,当
被激活的时候,
、
、
这三个元素里的配置才生效。
所以这个元素要至少要和其他三个元素之一同时使用才有意义。
<profiles>
<profile>
<id>testid>
<activation>
<activeByDefault>falseactiveByDefault>
<jdk>1.5jdk>
<os>
<name>Windows XPname>
<family>Windowsfamily>
<arch>x86arch>
<version>5.1.2600version>
os>
<property>
<name>mavenVersionname>
<value>2.0.3value>
property>
<file>
<exists>${basedir}/file2.propertiesexists>
<missing>${basedir}/file1.propertiesmissing>
file>
activation>
...
profile>
profiles>
默认是否激活的标识jdk
的版本与指定的版本匹配时
将被激活。如:上面的例子中,当运行的java程序的jdk
版本为1.5.0_06时
将被激活。jdk的版本还支持范围配。 有关支持范围匹配的更多详细信息,请参阅 maven-enforcer-plugin 。
将被激活
。
。
。
。${name}
引用),则
将激活。如果值字段是空的,那么存在属性名称字段就会激活profile
,如:上面例子中如果存在mavenVersion=2.0.3
,那么
将激活。
。
。注意:这多个激活条件的关系是这样的:Maven 3.2.2之前是只要满足其中之一就可以激活该
,Maven 3.2.2之后是满足所有才可以激活该
。
对应
的扩展属性列表。可以用来存放一些值。这些值可以在pom文件中的任何地方使用标记${X}
来使用,这里X是指属性的名称(如下例中的${user.install}
)。
<profiles>
<profile>
...
<properties>
<user.install>${user.home}/our-projectuser.install>
properties>
...
profile>
profiles>
属性的值有五种不同的形式
env.PATH
指代了$path环境变量(在Windows上是%PATH%)。1.0
通过${project.version}
获得version的值。false
通过${settings.offline}
获得
的值。
元素中,或者外部文件中设置,以${someVar}
的形式使用。如果我们想在application.peoperties文件中引用这个user.install
属性,这里注意引用时要用占位符@
user.install=@user.install@
在springboot工程中只能使用@xxx@
(xxx为自定义的属性名)
远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程仓库列表。
<profiles>
<profile>
...
<repositories>
<repository>
<id>codehausSnapshotsid>
<name>Codehaus Snapshotsname>
<releases>
<enabled>falseenabled>
<updatePolicy>alwaysupdatePolicy>
<checksumPolicy>warnchecksumPolicy>
releases>
<snapshots>
<enabled>trueenabled>
<updatePolicy>neverupdatePolicy>
<checksumPolicy>failchecksumPolicy>
snapshots>
<url>http://snapshots.maven.codehaus.org/maven2url>
<layout>defaultlayout>
repository>
repositories>
...
profile>
profiles>
插件仓库, Maven plugins是一种特殊的依赖项,与普通的jar包依赖仓库分开定义,结构与repositories类似。具体说明参考如上。
<profiles>
<profile>
...
<pluginRepositories>
<pluginRepository>
<id>myPluginRepoid>
<name>My Plugins reponame>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
<url>https://maven-central-eu....com/maven2/url>
pluginRepository>
pluginRepositories>
...
profile>
profiles>
它包含一组
元素,每个元素的值都是一个
中
里的值。无论任何环境设置如何,
定义的任何
都将处于活动状态。如果没有找到匹配的配置文件,则不会发生任何事情。和
配置相比
配置比较简单,也比较常用。
<activeProfiles>
<activeProfile>env-testactiveProfile>
activeProfiles>
<parent>
<artifactId />
<groupId />
<version />
<relativePath>../pom.xmlrelativePath>
parent>
<modelVersion>4.0.0modelVersion>
<groupId>com.companyname.project-groupgroupId>
<!-- 项目的唯一ID->
<artifactId>projectartifactId>
<version>1.0version>
<packaging>jarpackaging>
<properties>
<maven.compiler.encoding>UTF-8maven.compiler.encoding>
<spring-boot.version>2.3.7.RELEASEspring-boot.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
<version>${spring-boot.version}version>
<scope>compilescope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-coreartifactId>
<version>${hutool.version}version>
dependency>
dependencies>
dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>${spring-boot.version}version>
plugin>
plugins>
pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.mavengroupId>
<artifactId>sonar-maven-pluginartifactId>
<version>3.6.0.1398version>
plugin>
plugins>
build>
<repositories>
<repository>
<id>aliyun-publicid>
<url>https://maven.aliyun.com/repository/publicurl>
<snapshots>
<enabled>falseenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-publicid>
<url>https://maven.aliyun.com/repository/publicurl>
<snapshots>
<enabled>falseenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
pluginRepository>
pluginRepositories>
<distributionManagement>
<repository>
<id>maven-releasesid>
<name>releasesname>
<url>http://nexus.maven.cn/repository/maven-releases/url>
<uniqueVersion>trueuniqueVersion>
repository>
<snapshotRepository>
<id>maven-snapshotsid>
<name>snapshotsname>
<url>http://nexus.maven.cn/repository/maven-snapshots/url>
snapshotRepository>
distributionManagement>
<profiles>
<profile>
<id>devid>
<properties>
<spring.profiles.active>devspring.profiles.active>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>prodid>
<properties>
<spring.profiles.active>prodspring.profiles.active>
properties>
profile>
profiles>
maven仓库依赖下载顺序:
在settings.xml文件中配置的本地仓库中寻找依赖,没找到则进入第2步。
在settings.xml文件中配置的全局远程仓库中寻找,没找到则进入第3步。
在当前项目的pom.xml中配置的远程仓库中寻找,如果没找到则进入第4步。
在中央仓库 https://repo.maven.apache.org/maven2 中寻找,如果没找到则抛出依赖无法加载异常。