快捷搜索:  汽车  科技

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文件?settings.xm配置文件详解(1)

maven

配置文件settings.xml

maven配置文件可以使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文件中有几种访问方式可以访问变量

  1. ${env.x} :访问环境变量的x变量的值
  2. ${project.x}:访问pom文件里的x元素的值,
  3. ${settings.x}:访问settings.xml文件里元素的值,比如${settings.offline}对应settings.xml文件中的 <settings><offline>false</offline></settings>
  4. ${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技术。

猜您喜欢: