maven怎么指定settings文件?settings.xm配置文件详解
maven怎么指定settings文件?settings.xm配置文件详解<localRepository>/path/to/local/repo</localRepository>2.interactiveMode设置本地仓库目录,默认是${user.home}/.m2/repository,设置该值后在远程maven仓库下载的依赖都会存储在该目录下。以下示例展示settings.xml的所有一级元素<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 https://maven.apache.org/xsd/
概要maven是一款项目资料仓库,大概有以下几个目标:
- 简化构建过程
- 提供统一的构建系统
- 提供优质项目资料
目前java程序大部分都是基于maven进行构建的,可以说是java程序员必学的一门功课。
maven
配置文件settings.xmlmaven配置文件可以使maven的按指定的方式进行工作。maven的配置文件一般有两个存放的位置:
- ${user.home}/.m2/settings.xml
- ${maven.home}/conf/settings.xml
以下示例展示settings.xml的所有一级元素
<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
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
xml的内容可以使用以下表达式进行插值:
- ${user.home} 系统属性 (Maven 3.0以上版本支持)
- ${env.HOME} 环境变量写法
1.localRepository
设置本地仓库目录,默认是${user.home}/.m2/repository,设置该值后在远程maven仓库下载的依赖都会存储在该目录下。
<localRepository>/path/to/local/repo</localRepository>
2.interactiveMode
是否与用户交互以获取输入,默认true。
3.offline
是否离线模式,默认为fasle,设置为true将不会从互联网上下载依赖内容。offiline属性在一些因网络原因以及安全因素不能连接远程仓库时十分有效。
<offline>false</offline>
3.pluginGroups
可以添加多个pluginGroup的元素列表,内容包含一个groupId, 当使用插件并且命令行中没有提供groupId时,会搜索列表。该列表会自动包含 org.apache.maven.plugins 和 org.codehaus.mojo。
<pluginGroups>
<pluginGroup>org.eclipse.jetty</pluginGroup>
</pluginGroups>
设置了以上内容后,maven命令
org.eclipse.jetty:jetty-maven-plugin:run
可以简化为
mvn jetty:run
4.servers
仓库的下载部署一般是定义在pom.xml文件的repositories和distributionManagement 元素中。但是仓库访问的账号密码应该放在settings.xml文件中。
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${user.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
- id:server唯一标识,与用户无关,需与pom文件中的repository的id一致
- username password: 用户账号密码,(密码在 2.1.0版本后也可以使用加密技术,可以参见maven官方文档,本文不讨论)
- privateKey passphrase:跟username、password类似,这里是指定私钥的路径(默认 ${user.home}/.ssh/id_dsa)和密码
- filePermissions directoryPermissions:文件和目录创建时的权限,值对应unix系统的三位权限数字 664 775
如果使用了privateKey就不要在天password了,否则privateKey会被忽略。
5.mirrors
一般来讲,我们会在项目pom.xml文件中配置指定仓库用于下载依赖和maven插件,有时我们希望为仓库使用另外的镜像,但是不希望修改项目中的文件,这时就可以配置mirrors。
为什么我要配置mirrors:
- 使用地理上更近的镜像将更快速(比如国内阿里云比国外的快)
- 希望使用自己内部的仓库,将更易于管理
- 希望运行仓库管理器来为镜像提供本地缓存,因此需要使用url代替
配置示例
<mirror>
<id>aliyunmaven</id>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
- id:唯一标识,用于区分不同的mirror
- name:仓库名称
- mirrorOf:作为镜像的存储库的id。比如 central * !foo,不同的mirror里mirrorOf不能重复,否则将只使用第一个。
官方的仓库 由Sonatype公司托管,通过CDN分布在世界各地。如果mirrorOf 设置成central 将会替换官方的仓库从而使用自己配置的仓库。如果mirrorOf 设置成“*”,则会强制使用该仓库,那么该仓库就必须包含所有你需要的内容,该特性在 2.0.5以上版本有效。
在 Maven 2.0.9以上版本,你可以将mirrorOf 配置成逗号隔开的方式来配置多个仓库,注意不能有空格。
<mirror>
<id>aliyunmaven</id>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>repo repo1</mirrorOf>
</mirror>
可以在首字母前加感叹号来排除某个仓库
<settings>
...
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy</url>
<mirrorOf>external:* !foo</mirrorOf>
</mirror>
<mirror>
<id>foo-repository</id>
<name>Foo</name>
<url>http://repo.mycompany.com/foo</url>
<mirrorOf>foo</mirrorOf>
</mirror>
</mirrors>
...
</settings>
external:* 代表所有依赖都是外部,都不在本地主机上,也不基于文件。
6.proxies
设置代理服务器
<proxies>
<proxy>
<id>myproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
- id: 唯一标识
- active: 是否生效,只能一个代理设置为true
- protocol host port: 组合起来就是代理地址 protocol://host:port
- username password: 服务器账号密码
- nonProxyHosts:不用代理的主机列表,多个可以用 | 分割,逗号也是可以的
7.profiles
settings.xml文件中的profile是pom.xml中的profile的其中一部分,有以下部分组成:
(1)activation: 当满足所有指定的条件时,就会激活该profile,如下示例指定了条件jdk、系统、配置参数、文件是否存在或不存在等条件。
<profiles>
<profile>
<id>test</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.5</jdk>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>2.0.3</value>
</property>
<file>
<exists>${basedir}/file2.properties</exists>
<missing>${basedir}/file1.properties</missing>
</file>
</activation>
...
</profile>
</profiles>
如果某个profile被启用,将会覆盖pom中同id的profile。启用某个profile不只activation一种方式,还可以通过maven命令加 -P 参数启用某个profile。
(2)repositories:
当profile被激活时定义在profile里的远程仓库将被使用。
<profiles>
<profile>
...
<repositories>
<repository>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
...
</pluginRepositories>
...
</profile>
</profiles>
- releases snapshots: 仓库依赖的类型策略,发布版本和快照版本,可以设置启用某个版本,比如可能出于开发目的只启用快照版本。
- enabled: true代表启用该类型
- updatePolicy:更新频率 Maven将比较本地POM的时间戳(存储在存储库的Maven元数据文件中)和远程POM的时间戳。 选项有:always(总是)、daily(每天,默认值)、interval:X(每隔X分钟)或never(从不)。
- checksumPolicy:当Maven将文件部署到仓库时,它还将部署相应的校验文件,可选项 ignore fail warn 处理在校验文件缺失或不正确的情况。
- layout: 仓库布局,可选项 default legacy
(3)pluginRepositories
插件仓库, Maven plugins是一种特殊的依赖项,与普通的jar包依赖仓库分开定义,结构与repositories类似。
<profiles>
<profile>
<pluginRepositories>
<pluginRepository>
<id>snapshots</id>
<name>Snapshots Repositories</name>
<url>http://ip:8090/nexus/repository/maven-snapshots/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
(4)properties
定义参数,可以在pom文件中通过${属性名}引用,如下示例可以通过${user.install}引用。
<profiles>
<profile>
...
<properties>
<user.install>${user.home}/our-project</user.install>
</properties>
...
</profile>
</profiles>
在pom文件中有几种访问方式可以访问变量
- ${env.x} :访问环境变量的x变量的值
- ${project.x}:访问pom文件里的x元素的值,
- ${settings.x}:访问settings.xml文件里元素的值,比如${settings.offline}对应settings.xml文件中的 <settings><offline>false</offline></settings>
- ${x}:访问pom文件中的properties元素下的值
8.activeProfiles
activeProfiles包含一组activeProfile元素,值为profile的id 如果设为true 那么将启用该profile配置。
<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
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<activeProfiles>
<activeProfile>env-test</activeProfile>
</activeProfiles>
</settings>
以上就是setings.xml文件的全部内容了,因为添加了示例代码,有些长了,希望对大家能有所帮助。
欢迎关注我,不定时更新Java、IT技术。