4、私有仓库nexus(maven笔记)

1

前面我们讲过本地仓库和中央仓库,有时候我们还会在本地仓库和中央仓库中间配置一个私有仓库,这主要是用来管理一些常用的、公共的依赖包。同时也方便我们查询。这里我们使用私有仓库nexus。

一、安装

  • (1)解压缩之后将bin路径添加到环境变量

  • (2)在命令行中使用命令nexus install进行安装

  • (3)修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\conf中配置文件的wrapper.java.command=E:\javaJDK\jdk1.8.0_60\bin\java.exe这一行,将地址改成本地jdk的路径。

  • (4)使用命令nexus start启动。注意:如果启动失败,可能是端口被占用,这里修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\conf\ nexus.properties中的端口号,默认是8081,我们修改为8082。

  • (5)使用网址http://localhost:8082/nexus进行访问。点击左边的Repositories就可以看到工厂了。登录帐号admin,密码admin123

二、仓库简介

在仓库中我们可以看到有很多类型的仓库

  • (1)virtual是一个针对maven1的一个转接仓库,现在对我们来说没什么用处,此处不再讲解。

  • (2)hosted仓库都是内部项目的发布仓库。在hosted仓库中release表示内部项目的release模块的发布仓库,snapshots类似。3rd party表示第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去的,也就是不能自动在中央仓库中下载,比如Orecla依赖包。

  • (3)proxy类型仓库就是代理仓库,也就是要从远程中央仓库寻找数据的仓库。Apache Snapshot表示的是Apache的快照版本的仓库,Center表示中央仓库,点击下面的Configuration可以看到中央仓库的地址,我们可以更改。Codehaus Snapshot表示另一个开源组织Codehaus的快照版本仓库。

  • (4)group仓库。组仓库用来方便开发人员进行设置的仓库。也就是一个私有仓库。以后我们所有的下载都从此仓库中进行下载。

三、配置

选中某个仓库,在下面出现列表Configuration中我们下拉可以看到Ordered Group Repositories这一项,表示我们这个组中有列表中的仓库,以后我们下载依赖包就只需要去找Public Repositories也就是group这个仓库(之后我们会进行设置),它下面包含了很多中央仓库(这样我们在pom/xml文件中就不需要配置很多中央仓库了),分别下载不同类型的依赖包,旁边两个没有加进来的我们可以自己加入进来。

  • (1)配置:在我们的项目中我们不需要管什么中央仓库,统统交给group这个仓库给我们管理
<repository>
        <id>nexus</id>
        <name>Nexus Repo</name>
        <url>http://localhost:8082/nexus/content/groups/public/</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>true</enabled></snapshots>
</repository>

在项目的parent模块中(user-parent)中进行上面的配置,其中urlgroup仓库的地址,最后两项表示允许下载release版本和Snapshot版本的依赖包。默认的中央仓库中Snapshot版本是不能下载的。

  • (2)镜像配置
    maven安装包的settings.xml中进行配置,注意:这个文件是我们自己本地仓库的里面的那个设置文件,而不是maven/conf中的那个配置文件。
<mirror>
      <id>central</id>
      <!--号表示所有的工厂都加镜像,如果不想为所有工厂做镜像,请使用id,使用逗号分隔-->
      <!--<mirrorOf>central, nexus</mirrorOf>不建议-->
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://localhost:8082/nexus/content/groups/public/</url>
    </mirror>

放在<mirrors>标签中。

  • (3)测试一下
    我们可以找一个项目中没有的依赖包添加进去,在user-parent中:
<dependency>
        <groupId>mockobjects</groupId>
        <artifactId>mockobjects-alt-jdk1.3</artifactId>
        <version>0.09</version>
</dependency>

user-core中:

<dependency>
        <groupId>mockobjects</groupId>
        <artifactId>mockobjects-alt-jdk1.3</artifactId>
</dependency>

之后我们刷新nexusBrowse Index可以看到:

2

可以看到其配置信息就出现在我们的服务器上了。以后我们就不一定每次都去外面的工厂中找了。私服是更具索引去找依赖的,但是有时候可能索引的版本太低,不符合要求,此时我们需要更新索引。

  • (4)更新索引
    • 一种方式是选中Central仓库在Configuration中将Download Remote Indexes的值设置为true,此时就会自动帮我们更新,但是速度会很慢。
      3
    • 另一种方式是手动更新。方法是
      http://repo1.maven.org/maven2/.index/下载下面两个文件
nexus-maven-repository-index.properties  
nexus-maven-repository-index.gz

同时在

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.indexer%22%20AND%20a%3A%22indexer-cli%22

下载indexer-cli-5.1.1.jar
将下载的三个文件放在同一个目录(E:\nexus-2.11.4-01-bundle\index)下,然后通过DOS进入此目录中,使用命令
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
将压缩文件解压,之后在indexer目录下会看到很多文件。此时我们先将nexus关闭,然后将这些文件拷贝到
E:\nexus-2.11.4-01-bundle\sonatype-work\nexus\indexer\central-ctx
目录下(将原来的所有文件都删除)。之后启动nexus,可以在Browse Index中看到很多索引,我们之后可以自己更新这些索引,右键Central点击Update Index即可。

然后我们可以在搜索框中搜索我们想要的索引,不需要去其他地方搜索了。比如我们搜索spring web会出来很多结果,然后选择org.springframework中的一个:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.2.5.RELEASE</version>
</dependency>

加入到user-parentuser-core中,之后我们在Browse Storage中就可以找到:

4

注意:如果我们将本地group仓库的配置去掉,还是会下载的,因为在maven的包中本身默认配置了一个中央仓库了。但是这个仓库默认将Snapshot关闭了,所以我们需要在项目中进行设置。
但是这样每次都要在项目中进行配置,每个模块都要配置比较麻烦,所以我们需要在本地仓库中setttings.xml中进行配置:

<profile>
      <id>central-repos</id>
      <repositories>
        <repository>
          <id>central</id>
          <name>central</name>
          <url>http://central</url>
          <snapshots><enabled>true</enabled></snapshots>
          <releases><enabled>true</enabled></releases>
        </repository>
      </repositories>
</profile>

放在<profiles>标签中。注意:配置了镜像之后<url>就没有意义了,随便填一个(这项却不能少),但是还需要在setttings.xml最后配置:

<activeProfiles>
    <activeProfile>central-repos</activeProfile>
</activeProfiles>

将配置激活。

四、项目发布

  • 在本地仓库的setttings.xml中配置发布权限:
<!--配置用户发布快照版本的权限-->
<server>
      <id>user-snapshots</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>
    <!--配置用户发布release版本的权限-->
     <server>
      <id>user-releases</id>
      <username>deployment</username>
      <password>deployment123</password>
</server>

放在<servers>标签中。这里其实就是给我们发布时的权限。

  • user-parent中配置
    <distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <url>http://localhost:8082/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <url>http://localhost:8082/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>

注意:上面配置的其实就是我们的项目发布到哪个仓库,这里配置的是releasessnapshots,当然在发布之前我们需要在这两个仓库的配置中配置允许发布。将Deployment policy设置为Allow Redeploy,然后保存即可。

5

6

注意:此配置中的id需要和maven仓库settings.xml中的id对应,同时url就是nexus中快照仓库和release仓库的地址。然后使用命令clean deploy进行发布。因为我们发布的是快照版本,所以选中Snapshots中的Browse Storage刷新之后可以看到我们发布的项目。
7

五、创建项目工厂和设置权限

在以后的项目开发中我们不能将所有的模块一下子全部发布到公共的哪个releaseSnapshots仓库中,那样不便于管理,而且有可能冲突,所以我们一般将一些公共的模块发布到公共的releaseSnapshots仓库中,而一些特殊的模块发布到我们自己的仓库中,所以我们需要创建自己的仓库,这样有利于管理。

  • (1)创建一个自己的release版本发布工厂和快照版本发布工厂
    点击Add选择Hosted Repository,选中之后在下面填写相关信息:

    8

    其中第一项和第二项是我们自己填的,然后选择允许发布(默认是不允许的)即可点击save保存。注意:最后一项如果是release版本就选择release,如果是Snapshot就选择Snapshot。而快照版本的工厂建立类似。
    9

    这样我们就建立好了两个我们自己私有的仓库
    10

  • (2)为上面两个工厂打开权限
    点击Security中的Privileges,然后点击Add,在下面填写相关信息:

    11

    注意:最好不要写中文。名字我们可以任取,最后和项目工厂id一样,工厂选择我们release版本工厂的名字,最后一项按图中选择。点击save保存。对于快照版本的类似:
    12

    注意:配置完之后在上面要出现我们配置的权限才算成功:
    13

  • (3)创建角色并且分配权限
    选择Security中的Roles,点击Add,然后进行添加:

    14

    Role IdName由我们自己填写。注意:不要写中文。然后点击Add,之后我们需要选择刚才添加的权限,这里我们只创建一个角色,所以将快照和release权限都选中(我们可以在输入框中输入My,然后点击过滤Apply Filter),点击ok,之后点击save保存。

  • (4)创建用户
    点击Security中的Users,点击Add

    15

    Status中需要选择Active,然后点击Add,选择我们刚才创建的角色。保存即可。密码是123456

  • (5)创建发布工厂
    当我们建立好自己的发布工厂之后我们就不要发布到以前那两个仓库中了,所以需要将user-parent中的配置地址改动

<distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <!-- <url>http://localhost:8082/nexus/content/repositories/snapshots/</url> -->
            <url>http://localhost:8082/nexus/content/repositories/MyUserReposSnapshots/</url>
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <!-- <url>http://localhost:8082/nexus/content/repositories/releases/</url> -->
            <url>http://localhost:8082/nexus/content/repositories/MyUserReposRelease/</url>
        </repository>
</distributionManagement>

这里改动之后我们在settings.xml中也需要改动:

    <!--配置用户发布快照版本的权限-->
     <server>
      <id>user-snapshots</id>
      <!--<username>deployment</username>-->
       <username>kh</username>
      <!--<password>deployment123</password>-->
       <password>123456</password>
    </server>
    <!--配置用户发布release版本的权限-->
     <server>
      <id>user-releases</id>
      <!--<username>deployment</username>-->
       <username>kh</username>
      <!--<password>deployment123</password>-->
       <password>123456</password>
    </server>

当然这里我们只是做一个试验,名字和密码我们可以自己进行配置。
配置完之后再次进行发布,我们可以看到

16

当然对于一些公共模块,比如user-log模块,我们需要配置

    <distributionManagement>
        <snapshotRepository>
            <id>user-snapshots</id>
            <name>User Project SNAPSHOTS</name>
            <url>http://localhost:8082/nexus/content/repositories/snapshots/</url> 
        </snapshotRepository>

        <repository>
            <id>user-releases</id>
            <name>User Project Release</name>
            <url>http://localhost:8082/nexus/content/repositories/releases/</url> 
        </repository>
    </distributionManagement>

我们这样配置之后就会将user-parent中的配置覆盖掉,这样就发布到公共的仓库中了。

补:如果公司不能访问外网,则需要配置代理,配置之后一定记得将本地仓库_remote.repositories、**.pom.lastUpdated文件全部删除。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容