环境搭建
1、linux安装maven
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz
tar zxvf apache-maven-3.0.5-bin.tar.gz
mv apache-maven-3.0.5 /usr/local/apache-maven-3.0.5
vi /etc/profile
增加:
export MAVEN_HOME=/usr/local/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin
source /etc/profile
mvn -v
2、linux安装nexus
需要的安装包:nexus-2.11.4-01-bundle.tar(csdn下载地址:http://download.youkuaiyun.com/detail/carboncomputer/9595216)
需要jdk版本1.7以上
tar zxvf nexus-2.11.4-01-bundle.tar
端口配置文件,可修改端口:/nexus-2.11.4-01/conf/nexus.properties
cd nexus-2.11.4-01/bin
./nexus start
本地机器访问:http://xxx.xxx.xxx.xx:8081/nexus/
如果启动成功,就会显示如下:
如果在启动过程中说要求root权限的。可以百度解决,或者用sudo sh nexus start启动。
用默认的账号密码登录:admin/admin123
环境就部署好了,现在是使用maven仓库。
注意:严重不提倡使用nexus3.0以上的版本,一开始用这个,安装时很多问题需要解决,此外,新的界面很难使用。官网上也是推荐使用maven时采用nexus2.X版本。
maven仓库使用及版本发布管理
点击仓库列表
主要是两个类型:
snapshots:开发过程中的版本仓库
release:正式发布的版本仓库
public:maven主库
3rd party:专门存放第三方的jar,
- Releases: 这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.
- Snapshots: 这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.
- 3rd Party: 顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛, 没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rd party仓库.
主要是介绍如何使用nexus来管理版本和本地开发过程。
上传第三方的jar如下:
snapshots、release全部开发允许部署的权限,如下
Maven deploy部署jar包到远程私仓有两种方法(一种配置setting.xml,一种在pom.xml里面写)
一、现在来看看setting.xml文件里面的配置
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
二、第二种pom.xml的内容设置如下:
<project>
…
<distributionManagement>
<repository>
<id> nexus-releases</id>
<name> Nexus Release Repository</name>
<url> http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id> nexus-snapshots</id>
<name> Nexus Snapshot Repository</name>
<url> http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
…
</project>
这里配置,让Maven知道当我要发布release版本或者snapshot版本是需要发布到哪个地址.
然后我们需要在setting.xml里面配置一下Nexus的帐号和密码:
<settings>
…
<servers>
<server>
<id> nexus-releases</id>
<username> admin</username>
<password> admin123</password>
</server>
<server>
<id> nexus-snapshots</id>
<username> admin</username>
<password> admin123</password>
</server>
</servers>
…
</settings>
以上配置好以后,idea里面打包时只需要双击maven里面的deploy按钮就行
关于发布releases版本与snapshots版本的问题,maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,如果版本号中没有带SNAPSHOT,deploy时就会发布正式版本。
打开nexus后台查看正式版本:
而使用快照版本的模块:
在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
而使用正式版本的模块,:
在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
注意:
1、在pom文件中的配置仅对当前项目有效,但若需在其他项目中使用,为避免代码重复性,减少冗余,可在settings.xml文件中配置