为什么要搭建私服
私服,私有服务器,是公司内部Maven项目经常需要的东东,搭建在内部局域网更快,对于现在开发来说有很多第三的SDK在公共仓库里是没有提供的,这时就需要安装到本地仓库中去
安装到本地仓库 对于是以maven构建的sdk直接在源码的pom.xml文件所在的目录下执行 mvn clean install 就可以了,有时候由于其sdk中包含有部分Junit单元测试因为环境的原因不会通过会导致install失败(install 之前会默认执行mvn test),这时就可以使用mvn clean install -DskipTest=true来略过mvn test这一步,对于大部分的第三方SDK来说,可以略过mvn test这一步,放心大胆的install后使用。对于是直接提供的jar文件的第三方sdk(这种公司的CTO应该去面壁思过了)可以使用以下命令
mvn install:install-file -Dfile=D:/jar/my.jar -DgroupId=xxx.xxx -DartifactId=xxx -Dversion=x.x -Dpackaging=jar其中 -Dfile这个参数用于指定jar文件所在的目录以上示例中是在D:/jar目录下一个名为my.jar的文件 -DgroupId用于指定组织名建议以该sdk的提供公司的域名为的反转形式如
com.tencent 参数-DartifactId用于指定项目名称,尽量见名知意,-Dversion用于指定版本号(应该符合传统的版本命名风格,但不是强制)以上三个参数共同组合起来就唯一确定了该jar在maven仓库中的所在。安装完成后你在其它的maven项目中就可以用dependency标签引用这个jar的依赖了
安装到远程仓库 理论上来说安装到本地是就足够了,公司团队的其他人可以通过拷贝你的本地仓库然后覆盖他的(对于菜鸡懒得研究的话复制粘贴文件是最简单),他就可以正常使用了,否则其他所有就必须都安装一次才行,第个人都安装一次效率太低了,这时就需要一个人deploy到远程仓库里然后在pom文件定义依赖,其它pull下代码maven项目就可以自动从远程仓库中拉取这个jar省去所有人都要install一遍的麻烦,但是问题来了,在提供的公有maven仓库中普通个人和公司是没有权限向公共仓库中deploy的,公司内部开发团队又确实有这样一个需求,怎么办呢?这里就需要maven私服了
如何搭建私服
Nexus是常用的私用Maven服务器,一般是公司内部使用。下载地址是http://www.sonatype.org/nexus/go,选把合适的版本,解压,在bin目录下执行./nexus start私服就启动了,开启Nexus服务后访问url地址http://192.168.1.103:8081/nexus/(具体机器的ip),之后登录系统,用户名密码分别是:admin/admin123里面提供了完整的用户,权限,角色的管理,具体使用自行研究
如何使用私服
- 开启本机对私服仓库的访问权限
在你的maven 的settings.xml文件的servers标签下添加
<!--指定快照仓库的访问用户名和密码-->
<server>
<id>maven-snapshots</id>
<username>kgdngitfk</username>
<password>kgdngitfk</password>
</server>
<!--指定发行仓库的用户名和密码-->
<server>
<id>maven-release</id>
<username>kgdngitfk</username>
<password>kgdngitfk</password>
</server>
其中的username和password分别为你在私服中设置的用户名和密码,你用默认的admin也行
maven项目中使用私服
在pom文件中指定你私服的仓库地址
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<!--可用的私服仓库地址,realease,snapshots,的正确url-->
<url>http://192.168.1.103:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
url必须要是你私服上众多仓库中的一个可用的,这样就是从你的私服中下载你项目的定义的依赖了,记住pom文件中的所有定义都只对当前项目生效,如果要对本机所有生效,就应该在maven的配置文件settins.xml中的profile标签下添加定义
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.1.103:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled><!--抱歉,我以不知道个这参数是干什么的-->
</releases>
<snapshots>
<enabled>false</enabled><!--抱歉,我以不知道个这参数是干什么的-->
</snapshots>
</repository>
</repositories>
并激活他
maven的配置文件settins.xml中的profile标签下
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
deploy到私服
- 对于使用maven构建的项目
在pom.xml文件的project标签下添加
<distributionManagement>
<repository>
<id>maven-release</id><!--这是的id要与权限开启相对应-->
<name>Nexus Release Repository</name>
<url>http://192.168.1.103:8081/repository/maven-releases/</url><!--releas仓库地址-->
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus snapshot Repository</name>
<url>http://192.168.1.103:8081/repository/maven-snapshots/</url><!--snapshot仓库地址-->
</snapshotRepository>
</distributionManagement>
这时你就可以在你的pom文件所在的目录下使用mvn clean deploy命令将你的项目deploy到私服代项目中的其它人员引用了,如果你的maven项目中的的<version>标签的内容是以“ -SNAPSHOT”结尾的则是一个snapshot版本,就会默认deploy到snapshot仓库中去,sanpshot版本可以多次deploy到snapshot仓库去,私服会对每次的deploy做保留,每次deploy的jar都会带上一个时间戳,但是再引用的时候只会引用最近的一个snapshot版本
如果<version>标签的内容不是以-SNAPSHOT版本结尾的则只能 deploy一次并且,无法覆盖,要想重新deploy只能在私服的web管理端上将其删除才可以再次deploy
- 对于jar文件deploy到私服
使用命令
mvn deploy:deploy-file -Dfile=D:/jar/my.jar -DgroupId=xxx.xxx -DartifactId=xxx -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Durl=http://192.168.1.103:8081/repository/maven-snapshots/ -DrepositoryId=maven-snapshots
注意如果你指定的仓库是snapshots仓库那么version必须以”-SNAPSHOT”结尾否则会deploy失败的!!!
还有一点需要补充的是jar文件不要放在Maven本地仓库中否则无法deploy到远程私服!
补充点
私服上这个仓库
http://192.168.1.103:8081/repository/maven-public/里有同时有maven-releases和maven-snapshots两个仓库中的maven依赖,暂时就到这里吧,算是对Maven私服的搭建和平常开发中Maven使用中遇到的问题的一个总结
3610

被折叠的 条评论
为什么被折叠?



