Nexus搭建Maven私服

一. 搭建nexus私服的目的

为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一 台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。

1.1 nexus架构

二. Nexus私服搭建过程

2.1 安装环境概述

     1.OS: windows 10

     2.JDK: jdk1.7.0_67

2.2 nexus下载

     nexus下载地址:http://www.sonatype.org/nexus/go

     下载完成后得到zip压缩包,用好压工具解压后如下所示:

  

     nexus-2.12.0-01目录下主要是nexus项目运行依赖的文件。

     sonatype-work目录下主要是建立私服后放置jar文件的仓库

2.3 nexus安装及启动

    打开F:\WqProgram\nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw目录如下:

   

根据自己的系统版本进入适合的目录,我进入的是目录,如下所示:

打开以“系统管理员”身份打开cmd窗口,切换到该目录下,运行install-nexus.bat

接着,运行start-nexus.bat

这是nexus项目已经安装及启动完毕。

2.4 Nexus测试

打开浏览器,地址栏内输入nexus地址:http://localhost:8081/nexus, 页面打开如下:

出现这个界面说明nexus私服已经搭好。

在首页右上角找到图标,点击后打开登录对话框,输入账户名及密码admin/admin123

进入系统后,可看到页面左侧菜单及右侧数据如下所示:

2.5. Nexus相关概念

  2.5.1  类型介绍

    登陆Nexus,在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository。

    这里简单介绍下几种repository的类型:

    Ø  hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。

    Ø  proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。

    Ø  group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

          2.5.2  管理本地仓库

       我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:

   Releases:

    这里存放我们 自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.

   Snapshots:

    这个仓库非常 的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.

   3rd Party:

     顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。

 

2.6 在Nexus为自己的项目手动单独建库

建库,Add-- >HostedRepository, 创建一个本地库

页面底部打开添加界面如下:

 

表示我们要创建一个id为10002的本地仓库

 

2.7 Maven仓库组

2.7.1 maven中配置仓库组

       通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可。如下图:

 

  <profiles>
    <!-- profile
     | Specifies a set of introductions to the build process, to be activated using one or more of the
     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
     | or the command line, profiles have to have an ID that is unique.
     |
     | An encouraged best practice for profile identification is to use a consistent naming convention
     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
     | This will make it more intuitive to understand what the set of introduced profiles is attempting
     | to accomplish, particularly when you only have a list of profile id's for debug.
     |
     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
    <profile>
      <id>jdk-1.4</id>

      <activation>
        <jdk>1.4</jdk>
      </activation>

      <repositories>
        <repository>
          <id>jdk14</id>
          <name>Repository for JDK 1.4 builds</name>
          <url>http://www.myhost.com/maven/jdk14</url>
          <layout>default</layout>
          <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
    </profile>
    -->

    <!--
     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
     | might hypothetically look like:
     |
     | ...
     | <plugin>
     |   <groupId>org.myco.myplugins</groupId>
     |   <artifactId>myplugin</artifactId>
     |
     |   <configuration>
     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
     |   </configuration>
     | </plugin>
     | ...
     |
     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
     |       anything, you could just leave off the <value/> inside the activation-property.
     |
    <profile>
      <id>env-dev</id>

      <activation>
        <property>
          <name>target-env</name>
          <value>dev</value>
        </property>
      </activation>

      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
    -->
<!-- 这部分便是添加nexus仓库组 start--> <profile> <id>nexusProfile</id> <repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile>
    <!-- 这部分便是添加nexus仓库组 end-->
  </profiles>

 

不要忘了在settings.xml文件中激活:

nexusProfile必须与上面的配置一致。

 

2.7.2 默认仓库组

    仓库组默认包含本地仓库 Releases,snapshots, 3rd party和代理仓库MavenCentral. 你可以在Configuration配置页添加仓库到这个仓库组. 如果需要你还可以创建一个仓库组,在Repositories菜单处选add-->Repository Group即可。仓库组在nexus中如下图所示:

 Configuration面板的"Ordered Group Repositories"部分的Releases,Snapshots, 3rd party便是nexus中的3个本地仓库。Central表示Maven中央仓库。

2.8 向nexus发布自己的jar包

   2.8.1 新建一个Maven项目

   打开eclipse, File->New Project, 打开创建项目对话框如下:

 

点击"Next"

继续"Next":

这个界面中org.apache.maven.archetypes选择"maven-archetype-quickstart", 继续下一步

点击"Finish"

默认生成pom.xml文件如上图右侧所示。

  <groupId>wq.maven.test</groupId> 这个是定义发布包的坐标位置,最后形如maven仓库中目录形式.../wq/maven/test
  <artifactId>MavenPro</artifactId> 这个是定义发布包的名称
  <version>0.0.1-SNAPSHOT</version> 定义发布包的版本
  <packaging>jar</packaging> 定义发布包的后缀, *.jar

根据上面的所有配置,最后发布包形如.../wq/maven/test/MyMavenPro/0.0.1-SNAPSHOT/MyMavenPro-0.0.1-snapshot.jar

 

2.8.2 配置pom.xml向Nexus发布jar包

现在来改造我们的pom.xml文件, 使我们自己的jar包可以发布在nexus上

在项目的pom.xml文件中加入如下配置:

 1 <distributionManagement>
 2       <repository>
 3         <id>nexus-releases</id>
 4         <name>Nexus Release Repository</name>
 5         <url>http://localhost:8081/nexus/content/repositories/releases/</url>
 6     </repository>
 7     <snapshotRepository>
 8         <id>nexus-snapshots</id>
 9         <name>Nexus Snapshot Repository</name>
10         <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
11     </snapshotRepository>
12   </distributionManagement>

修改后pom.xml文件整体:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>wq.maven.test</groupId>
  <artifactId>MavenPro</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MavenPro</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <distributionManagement>
      <repository>
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
</project>

上面分2部分, 分别是发布版和快照版,对应于nexus的Releases和snapshots库, 这里需要注意地址是否配置正确, 如下图所示(最后2个库):

2.8.3 编写程序

项目中, 默认生成的App.java如下所示:

 

 1 package wq.pro.test;
 2 
 3 /**
 4  * Hello world!
 5  *
 6  */
 7 public class App 
 8 {
 9     public static void main( String[] args )
10     {
11         System.out.println( "Hello World!" );
12     }
13 }

 修改后如下所示:

 1 package wq.pro.test;
 2 
 3 /**
 4  * Hello world!
 5  *
 6  */
 7 public class App 
 8 {
 9     public static void main( String[] args )
10     {
11         //简单修改下我们的打印语句为"MavehPro: Hello World!"
12         System.out.println( "MavehPro: Hello World!" );
13     }
14 }

2.8.4 发布

选中刚才创建的项目"MavenPro"->右键->Run As->Maven build..., 打开窗口如下:

在"Goals"处输入"deploy"->点击Apply->点击Run, 用于发布jar包, 运行后日志如下:

[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ MavenPro ---
[INFO] Downloading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.jar
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.jar (3 KB at 17.9 KB/sec)
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.pom
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.pom (2 KB at 3.4 KB/sec)
[INFO] Downloading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml (771 B at 10.8 KB/sec)
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml (281 B at 4.2 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.105 s
[INFO] Finished at: 2016-03-07T11:29:29+08:00
[INFO] Final Memory: 13M/31M
[INFO] ------------------------------------------------------------------------

注意上述日志中红色部分,表示发布的东西和位置,这时打开nexus的Snapshots仓库:

点击最右侧的链接进入仓库:

顺着目录路径依次点进去:

上面的文件便是我们最终发布的东西,打开本地maven仓库,可以看到我们的发布包如下:

2.9 从Nexus引用自己发布的jar包

2.9.1 创建项目"MavenPro2", 创建过程请参考2.8.1, 为了与第一个项目区分,请设置不一样的groupId,请参考下图:

2.9.2 添加MavenPro.jar依赖

修改pom.xml文件前:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>wq.maven.test2</groupId>
  <artifactId>MavenPro2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MavenPro2</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

修改pom.xml文件(红色字体部分)后:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>wq.test2</groupId>
 6   <artifactId>MyMavenPro2</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>MyMavenPro2</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16 
17   <dependencies>
18     <dependency>
19       <groupId>junit</groupId>
20       <artifactId>junit</artifactId>
21       <version>3.8.1</version>
22       <scope>test</scope>
23     </dependency>
24     <dependency>
25       <groupId>wq.maven.test</groupId>
26       <artifactId>MavenPro</artifactId>
27       <version>0.0.1-SNAPSHOT</version>
28     </dependency>
29   </dependencies>
30 </project>

 添加这部分,便是我们常用的添加maven依赖库,这里表示MavenPro2项目中有一个依赖的jar包是MavenPro-0.0.1-SNAPSHOT.jar

2.9.2 编写程序

项目中的App.java修改前:

 1 package wq.pro2.test2;
 2 
 3 /**
 4  * Hello world!
 5  *
 6  */
 7 public class App 
 8 {
 9     public static void main( String[] args )
10     {
11         System.out.println( "Hello World!" );
12     }
13 }

App.java修改后:

package wq.pro2.test2;

import wq.pro.test.App;

/**
 * Hello world!
 *
 */
public class App2 
{
    public static void main( String[] args )
    {
        //调用第一个项目中的方法
        App.main(args);
        System.out.println( "Hello World!" );
    }
}

import的便是我们第一个项目中所编写的java文件。main方法中调用App.main(args)。

2.9.3 测试

运行App2.java中的main方法, run as ->Java Application.

运行后, 打印结果如下:

MavehPro: Hello World!
Hello World!

红色字体表明, 引用自己发布的jar包成功。

3 Nexus其他使用

3.1 可重复发布

发布过的jar包,再次发布会报异常, 这时打开仓库的Configuration界面,改变Deployment Policy从Disable Redeploy->Allow Redeploy:

3.2 Nexus端口

nexus默认端口是8081, 如果遇到端口冲突, 可在配置文件中修改默认端口号, 修改后重启即可。

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF

application-port=8081配置nexus端口。

 

posted on 2016-03-07 12:46  mmylweiqin  阅读(226)  评论(0)    收藏  举报

导航