maven备忘
2017-09-21 本文已影响2人
menglj
1. 搭建私有库
使用docker搭建私有maven库,docker image为sonatype/nexus3
- 建立数据目录
mkdir /path/of/maven/data
chown 200 /path/of/maven/data
nexus3的运行用户id为200,所以需要把数据目录的owner改为200。
- 启动服务
docker run -d -p 8081:8081 --name nexus -v /path/of/maven/data:/nexus-data sonatype/nexus3
- 登录nexus服务
在浏览器中输入127.0.0.1:8081
,点击sign in
链接,默认的管理员用户名为admin
密码为admin123
。 - 创建repository
登录后,在管理员页面,可以创建自己的repository。如果创建自己的私有库,创建时,选择maven2 (hosted)
,如果创建代理库,则选择maven2 (proxy)
。详见参考文档[2]
- hosted类型
这里需要变更的是Version policy
,有3个选择:- Release - 表明本库里放置的是正式发布的库文件
- Snapshot - 表明本库里放置的是开发中的库文件
- Mixed - 表明库里面放置了上述两种库文件
- proxy类型
这里需要填写的是Remote storage
项,可以填写aliyun的maven镜像地址http://maven.aliyun.com/nexus/content/groups/public/
- hosted类型
经过上面的步骤,私有maven库建立完毕。接下来配置本地的maven配置文件,来使用私有maven库。
2. 配置maven setting.xml
maven设定文件为~/.m2/setting.xml
<settings>
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>mymvn</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>alimavenlocal</id>
<name>aliyun maven local</name>
<url>http://127.0.0.1:8081/repository/aliyunmaven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
上面的配置文件配置了1个hosted库,1个proxy库。以及上传文件时需要用的用户名密码。这里在profiles
中配置repository
,可以根据不同的profile
使用不同的repository
。
3. 部署jar到私有库
使用mvn
命令把jar文件上传到hosted库,以alipay sdk为例:
mvn deploy:deploy-file \
-DgroupId=com.alipay \
-DartifactId=sdk-java \
-Dversion=20170829142630 \
-Dpackaging=jar \
-Dfile=alipay-sdk-java20170829142630.jar \
-Durl=http://127.0.0.1:8081/repository/mymvn/ \
-DrepositoryId=mymvn
4. 配置pom.xml
使用私有库
按照下面的配置即可下载到刚才上传的alipay sdk
<project>
...
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.alipay</groupId>
<artifactId>sdk-java</artifactId>
<version>20170829142630</version>
</dependency>
</dependencies>
</project>
5. 配置pom.xml
,发布编译的成果到hosted库
<project>
...
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
在pom.xml
所在目录运行下面命令,把自己开发的库部署到hosted库中,mvn会根据pom中的version
属性判断发布的是release
版还是snapshot
版。
mvn deploy
6. 版本发布
每次发布的时候,需要修改pom.xml中的版本号,打包,测试,提交代码,上传jar文件到mvn库。上述一系列动作,可以使用release的插件来自动完成。命令如下:
$ mvn release:prepare
...
[INFO] Working directory: /Users/menglj/workspace/qiyitech/pfw
[INFO] Checking dependencies and plugins for snapshots ...
What is the release version for "pfw"? (cn.com.qiyitech:pfw) 0.4.0: :
# maven会根据pom中的版本信息来发布,如果pom中写的是`0.4.0-SNAPSHOT`,
# 则发布的版本为`0.4.0`。这里直接回车即可。
What is SCM release tag or label for "pfw"? (cn.com.qiyitech:pfw) pfw-0.4.0: :
# tag名称,默认即可
What is the new development version for "pfw"? (cn.com.qiyitech:pfw) 0.4.1-SNAPSHOT: :
# 发布后,下一版本的版本号是多少,可以改为0.5.0-SNAPSHOT
命令执行结束后,会把打包好的package上传到pom中配置的maven库中,修改pom.xml中相应版本号,并提交到版本库中,打上相应的tag。
7. 配置maven镜像
修改maven的settings.xml,增加如下字段:
<settings>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
如果自己搭建了私有库,在镜像中没有私有库中的内容,则修改mirrorOf
属性[3],指明镜像的库ID即可,例如:
<mirrorOf>central</mirrorOf>
或者把不走镜像的私有库ID排除
<mirrorOf>*,!mymvn</mirrorOf>