概要
maven是一款项目资料仓库,大概有以下几个目标:
- 简化构建过程
- 提供统一的构建系统
- 提供优质项目资料
目前java程序大部分都是基于maven进行构建的,可以说是java程序员必学的一门功课。
![ad75f687414553ebf0419d6638427249.png](https://i-blog.csdnimg.cn/blog_migrate/54bfb466ffe22927c5930614fdfec2e4.jpeg)
maven
配置文件settings.xml
maven配置文件可以使maven的按指定的方式进行工作。maven的配置文件一般有两个存放的位置:
- ${user.home}/.m2/settings.xml
- ${maven.home}/conf/settings.xml
以下示例展示settings.xml的所有一级元素
xml的内容可以使用以下表达式进行插值:
- ${user.home} 系统属性 (Maven 3.0以上版本支持)
- ${env.HOME} 环境变量写法
各元素介绍
1.localRepository
设置本地仓库目录,默认是${user.home}/.m2/repository,设置该值后在远程maven仓库下载的依赖都会存储在该目录下。
/path/to/local/repo
2.interactiveMode
是否与用户交互以获取输入,默认true。
3.offline
是否离线模式,默认为fasle,设置为true将不会从互联网上下载依赖内容。offiline属性在一些因网络原因以及安全因素不能连接远程仓库时十分有效。
false
3.pluginGroups
可以添加多个pluginGroup的元素列表,内容包含一个groupId, 当使用插件并且命令行中没有提供groupId时,会搜索列表。该列表会自动包含 org.apache.maven.plugins 和 org.codehaus.mojo。
org.eclipse.jetty
设置了以上内容后,maven命令
org.eclipse.jetty:jetty-maven-plugin:run
可以简化为
mvn jetty:run
4.servers
仓库的下载部署一般是定义在pom.xml文件的repositories和distributionManagement 元素中。但是仓库访问的账号密码应该放在settings.xml文件中。
server001 my_login my_password ${user.home}/.ssh/id_dsa some_passphrase 664 775
- 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代替
配置示例
aliyunmaven 阿里云公共仓库 https://maven.aliyun.com/repository/public *
- id:唯一标识,用于区分不同的mirror
- name:仓库名称
- mirrorOf:作为镜像的存储库的id。比如 central , *, !foo,不同的mirror里mirrorOf不能重复,否则将只使用第一个。
官方的仓库 由Sonatype公司托管,通过CDN分布在世界各地。如果mirrorOf 设置成central 将会替换官方的仓库从而使用自己配置的仓库。如果mirrorOf 设置成“*”,则会强制使用该仓库,那么该仓库就必须包含所有你需要的内容,该特性在 2.0.5以上版本有效。
在 Maven 2.0.9以上版本,你可以将mirrorOf 配置成逗号隔开的方式来配置多个仓库,注意不能有空格。
aliyunmaven 阿里云公共仓库 https://maven.aliyun.com/repository/public repo,repo1
可以在首字母前加感叹号来排除某个仓库
... internal-repository Maven Repository Manager running on repo.mycompany.com http://repo.mycompany.com/proxy external:*,!foo foo-repository Foo http://repo.mycompany.com/foo foo ...
external:* 代表所有依赖都是外部,都不在本地主机上,也不基于文件。
6.proxies
设置代理服务器
myproxy true http proxy.somewhere.com 8080 proxyuser somepassword *.google.com|ibiblio.org
- id: 唯一标识
- active: 是否生效,只能一个代理设置为true
- protocol, host, port: 组合起来就是代理地址 protocol://host:port
- username, password: 服务器账号密码
- nonProxyHosts:不用代理的主机列表,多个可以用 | 分割,逗号也是可以的
7.profiles
settings.xml文件中的profile是pom.xml中的profile的其中一部分,有以下部分组成:
(1)activation: 当满足所有指定的条件时,就会激活该profile,如下示例指定了条件jdk、系统、配置参数、文件是否存在或不存在等条件。
test false 1.5 Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 ${basedir}/file2.properties ${basedir}/file1.properties ...
如果某个profile被启用,将会覆盖pom中同id的profile。启用某个profile不只activation一种方式,还可以通过maven命令加 -P 参数启用某个profile。
(2)repositories:
当profile被激活时定义在profile里的远程仓库将被使用。
... codehausSnapshots Codehaus Snapshots false always warn true never fail http://snapshots.maven.codehaus.org/maven2 default ... ...
- 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类似。
snapshots Snapshots Repositories http://ip:8090/nexus/repository/maven-snapshots/
(4)properties
定义参数,可以在pom文件中通过${属性名}引用,如下示例可以通过${user.install}引用。
... ${user.home}/our-project ...
在pom文件中有几种访问方式可以访问变量
- ${env.x} :访问环境变量的x变量的值
- ${project.x}:访问pom文件里的x元素的值,
- ${settings.x}:访问settings.xml文件里元素的值,比如${settings.offline}对应settings.xml文件中的 false
- ${x}:访问pom文件中的properties元素下的值
8.activeProfiles
activeProfiles包含一组activeProfile元素,值为profile的id,如果设为true,那么将启用该profile配置。
env-test
以上就是setings.xml文件的全部内容了,因为添加了示例代码,有些长了,希望对大家能有所帮助。
欢迎关注我,不定时更新Java、IT技术。