局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库
多个开发人员通过内网快速访问私服,私服没有的依赖会自定去远程仓库下载。A开发人员可以上传本地jar给其他开发人员使用
1.下载最新版本的nexus 下载地址http://www.sonatype.org/nexus/go
nexus-2.14.2-01:nexus工作相关信息
sonatype-work :私服依赖存放位置
2.启动方法:
方法1:
1.解压后进入\nexus-版本号\bin\jsw\windows-选择操作系统\
console-nexus.bat:启动nexus
install-nexus.bat:将nexus安装成windows服务
start-nexus.bat: 启动nexus的windows服务
stop-nexus.bat: 停止nexus的windows服务
uninstall-nexus.bat:取消将nexus安装成windows服务
2.双击console-nexus.bat运行。游览器中输入http://127.0.0.1:8081/nexus/
方法2:
1.环境变量中加入nexus的bin目录,让nexus命令可以在任意位置使用
2.修改:nexus-2.14.2-01\bin\jsw\conf\wrapper.conf,大概15行
wrapper.java.command=jdk的bin目录\java(D:\jdk1.7\bin\java)
3.在cmd输入:nexus install即可安装服务
4.在cmd输入:nexus start即可启动服务
5.游览器中输入http://127.0.0.1:8081/nexus/
3.8081为默认的端口号,要修改端口号可进入nexus-2.1.2-bundle\nexus-2.1.2\conf\打开nexus.properties文件,修改application-port属性值就可以了。
4.默认的用户名和密码:admin/admin123
5.仓库组合:名称 类型 ...
5.PublicRepositories(仓库名称): 仓库组有以下内容
3rd party: 无法从公共仓库获得的第三方依赖发布版本的构件仓库
Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
6.Nexus仓库类型 nexus的仓库类型分为以下四种:
group: 仓库组,包含下面所有类型,在pom.xml的远程仓库地址配置为group即包含了下面的所有类型的工厂,可以对group包含的仓库类型进行管理
添加或删除下面的包含,Ordered Group Repositories为被选中的仓库
hosted:宿主,面向局域网,不面向公网,保存开发者提交的版本,根据不同的版本保存到不同的host仓库以及保存第三方jar
1.Releases hosted:保存varsion为release的项目
2.Snapshots hosted:保存varsion为snapshot的项目
3.3rd party hosted:保存远程仓库没有的第三方jar
proxy:代理,保存中央工厂下载的依赖,可以配置保存路径
1.Apache Snapshots 保存apache的依赖
2.Central 保存其他第三方依赖
virtual:基于maven1的,虚拟的
7.私服的使用在pom.xml(单个项目),或者setting.xml(所有maven项目)中配置私服(曾经项目的pom老是报错,最后删除了本地的所有依赖和nexus的centrl下面的所有依赖后解决)
1.在项目的pom.xml中添加指定私服代码(单个项目)
<repositories>
<repository>
<id>nesus(私服id,随便起)</id>
<name>Nexus Repository</name>
<!-- 这里为仓库组地址,可根据需求配置不同的仓库地址(Repository Path的值) -->
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<!-- 是否会从Releases hosted仓库找依赖 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否会从Snapshots hosted仓库找依赖,默认false -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
2.在settings.xml文件中加入指定私服代码(所有项目)(profiles标签中)
<profile>
<id>仓库名字(nesxusProfile)</id>
<repositories>
<repository>
<id>nesus(私服id,随便起)</id>
<name>Nexus Repository</name>
<!-- 这里为仓库组地址,可根据需求配置不同的仓库地址(Repository Path的值) -->
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<!-- 是否会从Releases hosted仓库找依赖 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否会从Snapshots hosted仓库找依赖,默认false -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
配置2配置后并不会生效,加入生效代码:(控制不同版本需要不同仓库,可以配置全部仓库,在不同版本打开不同的生效)
<activeProfiles>
<activeProfile>id名(nesxusProfile)</activeProfile>
<activeProfile>仓库2...</activeProfile>
</activeProfiles>
8.限制开发者直接访问中央工厂
解决方案:将对中央工厂或者所有工厂的访问镜像(转到)到nexus(或指定的工厂)工厂,如果nexus服务未开启,讲报错,不会到中央工厂访问,如果开启了但nexus没有依赖,将又nexus负责访问中央工厂
在settings.xml中加入镜像url
<mirror>
<id>maven.net.cn(随便起,如果访问ali的镜像可以为:aliRepo)</id>
<!-- 对中央工厂(id为central)的访问讲转到下面配置的url工厂,不会在访问中央工厂,url工厂没有会自动到中央工厂下载 -->
<!-- 对所有工厂的访问(*)的访问都会转到下面配置的url工厂,只会访问这个url工厂,url工厂没有会自动到中央工厂下载 -->
<mirrorOf>central或*(私服id,repositories>repository下指定访问私服的id)</mirrorOf>
<name>central mirror in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
9.发布自己的项目到nexus工厂(mvn deploy命令)
1.配置发布工厂(在项目的pom.xml 或者 父pom.xml中 所有项目继承)
<!-- 配置发布工厂,发布不同版本的项目到不同版本的工厂 -->
<distributionManagement>
<!-- release版本发布的工厂 -->
<repository>
<id>user-release</id>
<name>user release resp</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
<!-- snapshot版本发布的工厂 -->
<snapshotRepository>
<id>user-snapshot</id>
<name>user snapshots resp</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
2.给用户授权(在settings.xml中)
<!-- 为用户配置发布项目到nexus的权限 -->
<servers>
<!-- 配置发布release版本的权限,与pom.xml中distributionManagement标签中的某个id相同 -->
<server>
<id>user-release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<!-- 配置发布snapshot版本的权限,与pom.xml中distributionManagement标签中的某个id相同 -->
<server>
<id>user-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
3.发布完后就可以在nexus的Snapshots和Releases工厂看到发布的项目,其他开发人员可以从这个工厂下载发布的依赖
10.分项目管理nexus工厂(为不同的项目配置不同的发布工厂)
(cms项目)
1.添加工厂
1.添加cms项目的release版要发布的工厂
Repositories面板下=>Add=>Hosted Repository:
Repository ID:工厂的ID cms-release
Repository Name:工厂的名称 cms release repository
...
Repostory Polcy:仓库策略 Release
Access Settings:
Delpoyment Polcy:是否打开发布 Allow Redeploy:允许发布
Save:保存
2.添加cms项目的snapshot版要发布的工厂
Repositories面板下=>Add=>Hosted Repository:
Repository ID:工厂的ID cms-snapshots
Repository Name:工厂的名称 cms snapshots repository
...
Repostory Polcy:仓库策略 Snapshot
Access Settings:
Delpoyment Polcy:是否打开发布 Allow Redeploy:允许发布
Save:保存
2.设置权限
1.添加操作权限
1.为cms release仓库添加操作权限
Privileges面板下=>Add=>Repository Target Privilege
Name:权限名称 cms release privilege
Description:描述 cms release privilege
Repository:为哪个工厂添加权限 cms release repository(上面工厂的name)
Repository Target:添加哪些权限 All(Maven2)
Save:保存
2.为cms snapshots添加操作权限
Privileges面板下=>Repository Target Privilege
Name:权限名称 cms snapshot privilege
Description:描述 cms snapshot privilege
Repository:为哪个工厂添加权限 cms snapshot repository(上面工厂的name)
Repository Target:添加哪些权限 All(Maven2)
Save:保存
3.添加角色并分配权限
1.添加角色
Roles面板下=>Nexus Role
Role id:cms-role
Name :cms role
Role/Privilege Management:角色可以管理的权限 Add=>搜索cms=>全选=>save
4.创建用户并添加到角色中
1.添加用户
User面板下=>Add=>Nexus User
User ID:cms settings.xml授权时的用户名username
First Name:cms
Last Name:cms
Email:xxxx@xxx.com
Status:Active(激活)
New Password:密码 cms123 settings.xml授权时的密码password
Confirm Password:确认密码 cms123
Role Management:用户的角色(上面已添加的角色的name) Add=>选择cms role=>save
5.修改pom.xml的cms项目的发布工厂
<!-- 配置发布工厂,发布不同版本的项目到不同版本的工厂 -->
<distributionManagement>
<!-- release版本发布的工厂 -->
<repository>
<id>cms-release</id>
<name>cms release resp</name>
<url>cms的nexus的地址</url>
</repository>
<!-- snapshot版本发布的工厂 -->
<snapshotRepository>
<id>cms-snapshot</id>
<name>cms snapshots resp</name>
<url>cms的nexus的地址</url>
</snapshotRepository>
</distributionManagement>
6.修改给用户授权时的用户名和密码
<server>
<id>cms-snapshots</id>
<username>cms</username>
<password>cms123</password>
</server>
7.在发布项目,会把项目发布到新建的不同版本的cms项目仓库中
9.解决私服访问中央仓库很慢的问题:
1.将对中央仓库的访问改为国内仓库访问:Repositories=>Central=>Configuration=>Remote Storage Location的值改为国内仓库地址,save
10.本地和远程仓库的关系(优先级)(如果搭建远程私服报错,复制索引到远程仓库,或者项目右键maven->update project,但是这次勾选 Force Update)
1. 当依赖的范围是system的时候,Maven直接从本地文件系统解析构件
2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功
3. 在本地仓库不存在相应的构件情况下,如果依赖的版本是显示的发布版本构件,则遍历所有的远程仓库,发现后下载使用
4. 如果依赖的版本是RELEASE或LATEST, 则基于更新策略读取所有远程仓库的元数据,将其于本地仓库的对应元数据合并后,计算出RELEASE或者LATEST的真实值,然后基于这个真实值检查本地仓库
5. 如果依赖的版本是SNAPSHOT, 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库或从远程仓库下载
6. 如果最后解析到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件 至 非时间戳格式,并使用该非时间戳格式的构件
详见:https://www.zhihu.com/question/24930782
8.详见:http://www.cnblogs.com/luotaoyeah/p/3791966.html或http://blog.csdn.net/liujiahan629629/article/details/39272321
十.搭建Nexus私服
最新推荐文章于 2023-06-27 12:02:34 发布