Nexus 私有仓库搭建与 Maven 集成

Nexus 私有仓库搭建与 Maven 集成

  Maven 是日常开发过程中,都会接触到的项目管理工具。Maven 可以将开发人员从繁杂的文档管理、项目打包等工作中解放出来,把更多的精力放在业务开发上。Maven 带来的便利这里就不多说了,但是只是单单使用 Maven,有时候也会遇到依赖文件无法下载的情况,原因有很多,有可能是中央仓库的问题,也有可能是网络问题等等;与此同时,有一部分的第三方的类库是没有发布到 Maven 上的,因此并没有 Maven 相关的依赖信息,这就给我们使用 Maven 构建项目带来了一定的麻烦。例如以下的这个例子,就是经常会遇到的问题。

  在最近的一个测试项目中,由于个人比较喜欢有条不紊,所以一直是使用 Maven 作为项目构建的工具,但是在构建 Hibernate 相关依赖的过程中,发现有一部分相关的 Jar 无法正常下载,中间也换过各种软件仓库,但是最后都是无法正常构建项目。

1

2

3

4

5

6

<dependency>

  <groupId>org.hibernate</groupId>

  <artifactId>hibernate-distribution</artifactId>

  <version>3.6.0.Beta2</version>

  <type>pom</type>

</dependency>

  

  最后,实在没辙了,想起了要搭建一个私有仓库。本文主要介绍 Nexus 私有仓库的搭建过程,以及 Nexus 与 Maven 的整合。本文使用的 Nexus 版本为 Nexus Repository Manager OSS 2.14.5-02 ,之所以不使用最新的 Nexus Repository Manager OSS 3 是因为个人感觉版本3还没有版本2友好,特别是在图形管理界面的操作上。

  首先需要到官网上下载 Nexus Repository Manager OSS 2.14.5-02 的安装包,下载地址为:https://www.sonatype.com/download-oss-sonatype,解压后的目录结构:

   

  在命令行窗口,进入 \nexus-2.14.5-02-bundle\nexus-2.14.5-02\bin 目录,输入 nexus install 命令,安装 Nexus(需要等待一小段时间)。安装成功后,进入服务管理界面,找到一个名为 nexus 的服务,启动该服务,服务启动完成后,打开浏览器,输入 http://localhost:8081/nexus ,如果可以看到欢迎界面,说明 Nexus 安装成功了。

   

  点击右上角的登录按钮,输入管理员账号和密码(默认账号:admin,密码:admin123)登录。

  登录成功后,选择左边 Views/Repositories 菜单下的 Repositories,可以看到一些预设的仓库,我们会用到的一般只有 Public Repositories 和 3rd party , Public Repositories 为公共仓库,3rd party 为第三方仓库,可以上传第三方的 Jar (当然也可以是自己封装的 Jar)。

  Nexus 安装成功后,接下来需要修改 Maven 的配置文件(settings.xml),整合 Nexus。

  找到 <servers> 标签,添加 Nexus 默认认证信息:

1

2

3

4

5

6

7

8

9

10

<server>   

    <id>my-nexus-releases</id>   

    <username>admin</username>   

    <password>admin123</password>   

  </server>   

  <server>   

    <id>my-nexus-snapshot</id>   

    <username>admin</username>   

    <password>admin123</password>   

  </server>

  找到 <mirrors> 标签,添加镜像:

1

2

3

4

5

6

<mirror>

  <!--This sends everything else to /public -->

  <id>nexus</id>

  <mirrorOf>*</mirrorOf>

  <url>http://localhost:8081/nexus/content/groups/public/</url>

</mirror>

  找到 <profiles> 标签,添加仓库信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<profile>

  <id>nexus</id>

  <!--Enable snapshots for the built in central repo to direct -->

  <!--all requests to nexus via the mirror -->

  <repositories>

    <repository>

      <id>central</id>

      <url>http://central</url>

      <releases><enabled>true</enabled></releases>

      <snapshots><enabled>true</enabled></snapshots>

    </repository>

  </repositories>

 <pluginRepositories>

    <pluginRepository>

      <id>central</id>

      <url>http://central</url>

      <releases><enabled>true</enabled></releases>

      <snapshots><enabled>true</enabled></snapshots>

    </pluginRepository>

  </pluginRepositories>

</profile>

  激活仓库:

1

2

3

4

<activeProfiles>

  <!--make the profile active all the time -->

  <activeProfile>nexus</activeProfile>

</activeProfiles>

  配置完成后保存,并重启 nexus  服务。

  重启  nexus  服务 完成后,在命令行窗口进入一个使用 Maven 构建的项目,输入 mvn package clean 命令,清理完成后,登录 nexus 的 admin 账号可以看到 Public Repositories  下出现了一些 Jar 包。

  此时刷新之前报错的项目,发现 Maven 依赖仍然有问题,无法正常下载 jboss 的一个 Jar 包。这个时候我们可以利用我们刚刚搭建的 Nexus 私有仓库,在网上自己下载缺失的 Jar 包,然后以第三方 Jar 的形式上传到私有仓库,依赖信息可以设置跟中央仓库一样。例如添加 jbosscache-core-3.2.1.GA.jar ,在外网上的依赖为:

1

2

3

4

5

<dependency>

    <groupId>org.jboss.cache</groupId>

    <artifactId>jbosscache-core</artifactId>

    <version>3.2.1.GA</version>

</dependency>

  选择 3rd party,把我们自己下载的  jbosscache-core-3.2.1.GA.jar 上传到 3rd party。在 Artifact Upload 选择卡页面,点击 Select Artifact(s) to Upload 按钮,选择需要上传的 Jar 包,选择完成后点击 Add Artifact 按钮。然后设置 Jar 的 Maven 依赖信息(后续引用 Jar 包需要用到),其中 Maven 依赖的相关信息可以设置成和中央仓库一致,如下图:

  Jar 包上传成功后,切换到 Browse Index 选项卡页面,点击刷新按钮,可以看到我们刚刚上传的 Jar 包,选中 Jar 包我们可以在右边看到 Jar 包对应的 Maven 依赖信息,可以用于项目的构建。

  进入本地仓库删除 \.m2\org\jboss\cache\jbosscache-core\3.2.1.GA 目录下的所有文件(重要,否则会构建失败),此时,再次回到刚刚构建失败的项目,刷新 Maven,可以看到项目已经可以正常构建了。

  如果本地安装了 Maven,可以在 Maven 的安装目录找到一些常用的软件仓库,位置为:${MAVEN_HOME}\lib\maven-model-builder-3.3.3.jar 下 \org\apache\maven\model\pom-4.0.0.xml ,其中 ${MAVEN_HOME} 为 Maven 的安装目录,用编辑器打开 pom-4.0.0.xml 可以看到很多预设的软件仓库。

  此处,也提供一些常用的软件仓库:

  http://maven.aliyun.com/nexus/content/groups/public(阿里云,推荐)

  http://mvnrepository.com

  http://www.sonatype.org/nexus

  http://repo1.maven.org/maven2

  这里,也提供一些 Maven 的参考资料:

  http://www.codeweblog.com/category/maven-gradle/

 

|出处:http://www.cnblogs.com/rexfang/

 

nexus的作用
在maven中有一个很重要的概念:仓库。在开发时有本地仓库,然后有maven的中央仓库。但对于一个企业或部门而言,却没有一个属于自己的仓库,一个企业也有自己封装的jar包和插件,本地仓库仅限每个开发者使用,中央仓库包罗万象供全球使用,但是没有为为企业提供管理自己产品的地方。引入nexus,就是为了搭建企业级的私有仓库,管理企业级依赖。下图是maven中nexus的作用图示:

nexus除了上面的作用外,还有很多好处,如节省贷款,控制和审计、部署第三方控件等,为maven的管理提供了很大的便利。

为maven提供搭建企业级私服的工具还有一些,但是常用的是sonatype公司的nexus软件。其包含jetty容器,可以自发布,实现仓库和权限管理。

nexus搭建步骤
1.       下载nexus,地址:http://www.sonatype.org/nexus/go/

2. 将下载文件拷贝到一个指定的文件夹,如:D:\maven_home\co_repository,然后解压缩,得到文件夹结构:


说明:nexus-2.11.0-02包含nexus程序,sonatype-work是nexus仓库保存jar包的默认路径。

3.设置环境变量,添加nexus的工作路径,在系统变量path前添加这段话:D:\maven_home\co_repository\nexus-2.11.0-02\bin;(windows)

注意:nexus oos版本,推荐安装的操作系统时linux,如果是unix,nexus官方文档说是可以支持。但是我用hp-ux的操作系统时,却不支持。因为%NEXUS_HOME%/bin/jsw/目录下,并没有对应hp-ux的平台启动程序。官方的说法也是推荐安装在linux上,unix下的安装未经过深度测试。

linux下可以不修改环境变量,直接在%NEXUS_HOME%/bin/目录下,执行命令:./nexus start 或./nexus stop命令,即可启动或停止程序。

4. 进入cmd命令,输入命令:nexus,可以看到如下界面:

5.命令的意思很清楚。现在开始启动,首次启动前先要执行:nexus install,将nexus服务添加到本地服务中:

然后再执行:nexusstart


6.Nexus启动后,访问网址(这里安装在本地):http://localhost:8081:nexus。得到界面:

到此,nexus安装完成。

nexus配置
使用默认仓库配置
1.登陆。点击右上角的:Log In。输入用户名密码:admin/admin123(默认)。登陆后,点击右侧的菜单栏:views/repository->Repositories,得到界面:

关于上面这个界面,先做点笔记:

上图红框中有很多仓库(repository),仓库中对应保存来自不同地方的依赖和插件。这些仓库有很多类型(type),大概有四个类型:

1)proxy,来自开源网站的一些依赖,如apache、中央仓库(central)、codehaus;

2)virtual,主要用于maven1,很少用到;

3)hosted,顾名思义,这是针对我们开发者的,我们的可以上传自己的第三方包到3rd party,上传开发或发布的包到snapshots或releases;

4)group,可配置以上三种类型的repository到一个组,配置此组就可以有组中仓库的访问权限。

2.  让本地项目到nexus仓库下载jar依赖,配置项目中的pom.xml文件。比如我这里有一个maven项目maven_part4,配置pom.xml添加以下一段代码:

<repositories>
      <repository>
          <id>nexus</id>
          <name>Nexus Repositories</name>
          <url>http://localhost:8081/nexus/content/groups/public/</url>
      </repository>
</repositories>
注意:配置中的ID,name无限制,可以自定义。但url标签需要指定仓库的访问url。

说明:group类型的Repository是可配置的,在红框三中配置。将右侧的选项,添加到左侧,保存。所添加的仓库,在此组中就可以被访问。

3.上面步骤中,为了将远程仓库路径指向nexus的仓库路径,修改的是maven项目的pom.xml。那么,如果我们在新增项目,还是需要修改每个项目的pom.xml。为排除上面的不便,我们可以修改本地maven的配置:${user_home}/.m2/settings.xml,新增下面两段话:

3.1)在<profiles>标签中增加一个profile配置,如下:
<profile>
      <id>nexusProfile</id>
      <repositories>
        <repository>
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://localhost:8081/nexus/content/groups/public/</url>
        </repository>
        <!-- open this,can download releases version dependency-->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- open this,can download snapshot version dependency,default is false. -->
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
      </repositories>
</profile>
3.2)在<activeProfiles>标签中,激活上面的profile配置,如下:
<activeProfiles>
    <activeProfile>nexusProfile</activeProfile>
</activeProfiles>
这样,所有本地使用此maven的项目都会指向nexus仓库了。

(问题:

我配置完此项后,settings.xml并未生效。

后来是因为myeclipse中的配置未更新。Myeclipse中有两处settings.xml需要修改:一、maven路径下的setting.xml,本地所有maven都会采用此配置;二、用户路径下的settings.xml,路径${user_home}/.m2/settings.xml,修改过此配置文件,如果配置未生效,最好在myeclipse中找到此项,确认路径正确,并点击update settings,刷新配置。(就是因为这个原因,我修改过的settings迟迟不生效))

Maven继承理解:maven项目都有一个super POM,这是所有POM的父类,包含很多默认配置;然后是%M2_HOME%/conf/settings.xml,此配置的之也会融入POM,此配置针对maven程序;其次是${user_home}/.m2/settings.xml,此配置针对用户,其配置项会覆盖maven级的settings.xml,再融入POM;最后是项目的POM,针对项目的特殊性做配置。上面的四个文件共同对一个项目生效。

Profile配置理解:在一个maven项目中,可能在不同的情况下需要的运行环境有所不同。如,在开发时下我们用一套环境,在发布时我们用另一套环境;或者系统为了兼容多版本的jdk,需要做一些调整,也就需要对不同的jdk做不同的配置等。

一个profile配置,就是一个环境的特定设置,可以对同一个环境配置多个profile。

配置了profile不代表此配置就生效,profile生效有两种方式:一、用特定环境的信息触发此配置生效,用<activation>标签;二、profile可以不包含<activation> 标签,但是需要在<activeProfiles>标签中,引用profile的id,来定义指明你需要让哪些profile生效。

4.mirror的使用。
如果我们需要一个公司只管理一个自己的私有仓库,不能让开发者直接从中央仓库下载依赖,那我们需要为中央仓库设置一个镜像,将中央仓库的链接指向nexus的仓库链接。镜像配置在${user_home}/.m2/settings.xml中。在<mirrors>标签中增加如下配置:

<mirror>
      <id>nexusMirror</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
注意:这里的mirrorOf配置的是repository的ID,代表匹配ID的工厂都访问此镜像;若配置多个repositoryID,可用英文逗号分隔;若配置*号,代表maven用户中所有工厂都访问此镜像。

其次,mirror只是映射符合条件(mirrorOf指定)的仓库的URL,而与匹配仓库的其他参数无关,若要修改,需要在对应的仓库位置修改。

中央工厂配置在super POM中,工厂id为central,若只是想明确的设定某几个工厂的镜像,可以这样写,如:<mirrorOf>nexus,central</mirrorOf>

 设置管理自己仓库组
5.在nexus中,有现成的Releases和Snapshots仓库。但是一个公司中,可能有几个不同的研发部门或不同的研发组,他们需要管理自己各自的开发和发布版本。Nexus为我们提供了创建自己的仓库和访问权限的功能。

首先,点击Add,选Hosted Repository项:


弹出仓库配置界面,填写对应值,如下:


如图上,填写仓库ID、名称、Provider。Repository Policy选择是开发还是发布仓库,但我们提交本地maven项目到nexus时,我们的项目的版本会自动识别放入对应的仓库中;四是设定上传依赖的仓库路径,可以默认自动生成。

一般创建两个仓库,一个用于发布,一个用于开发。如下:


然后需要为这两个新建仓库建一个组,将对应的仓库访问权限包含在其中。创建组方式类似:点击Add,选Repository Group。填写组仓库信息,配置组包含的仓库。如下:


现在一个属于某个部门的组就定义好了。在本地开发需要做的是,将settings.xml中的nexus仓库的访问地址改成我们的MyRepositoryGroupId的发布地址。

nexus部署配置
6.在nexus中,我们可以做的工作大致有两个:一个是获取依赖,而是上传打包项目。上面已经完成了获取依赖的配置,现在是nexus的部署管理。Nexus部署涉及到权限管理,我们每次往nexus中上传项目时,需要有对应的用户名和密码。此配置在如下位置:

对于权限管理需要配置三个地方,如上图红框所示:Privileges、Roles、Users。

6.1)首先配置privileges,将我们新建的仓库权限管理起来:

新增两个权限,一个是未开发版本库(snapshots),一个为发布版本库(releases)。如下图:


两个都新增后,如图:


6.2)创建可以访问club仓库的角色。点击Roles,进入添加角色:

点击ADD。(问题,第一次添加了privileges后,在Roles中添加权限,居然没有新增项,重启了nexus,新增数据才展示出来)。


6.3)添加用户club-user,为此用户添加club-Role角色权限。

新建用户,如下图。此用户的权限即可拥有管理项目的部署权限。


7.  完成了nexus的仓库、用户权限的配置后,需要将用户信息配置在文件中。需要配置的文件有两个。
7.1)需要配置的第一个文件:project.pom.xml。添加下面的配置,指明项目发布需要放置的仓库url:

 <distributionManagement>
      <repository>
          <id>club-module1-release</id>
          <name>Club Module Release</name>
          <url>http://10.25.119.18:8081/nexus/content/repositories/club-releases/</url>
      </repository>
      <snapshotRepository>
          <id>club-module1-snapshot</id>
          <name>Club Module1 Snapshot</name>
          <url>http://10.25.119.18:8081/nexus/content/repositories/club-snapshots/</url>
      </snapshotRepository>
  </distributionManagement>
7.2)配置第二个文件:${user_home}/.m/settings.xml,添加<servers>标签中添加如下配置,指明发布项目时需要的用户名密码:
<server>
      <id>club-module1-release</id>
      <username>club</username>
      <password>club123</password>
    </server>
    <server>
      <id>club-module1-snapshot</id>
      <username>club</username>
      <password>club123</password>
</server>
这样就算配完了。


原文:https://blog.csdn.net/lh87522/article/details/43281281 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值