Nexus私服搭建、配置、上传snapshot

博主折腾了很久,终于通过各种看资料, 稍微弄懂了一点私服。现在将自己的理解记录下来。

背景

实验室需要有一个比较大的项目,想要把功能尽可能细分。这里使用maven来管理项目。项目被细分为project-parent、project-war、project-a、project-b。其中后三个项目只是集成parent的pom的一些jar包,并不是模块关系。然后本人搭建了一个私服,想要从私服上下载jar包。

Nexus安装

关于安装教程见私服安装教程和原理

Nexus配置

一、搭建完私服,使用默认账号登录admin/admin123

二、配置repository

在Views/Repositories–>Repositories里进行配置。

nexus里可以配置3种类型的仓库,分别是proxy、hosted、group

proxy是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库 下载,然后返回给用户,相当于起到一个中转的作用。

hosted是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里。

group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。

nexus装好之后,已经初始化定义了一些repository,我们熟悉之后,就可以自行删除、新增、编辑。这里博主删了Apache snapshot等。右边那个Repository Path可以点击进去,看到仓库中artifact列表。

三、配置Central Repository

这个代理是最重要的,因为我们大部分依赖的jar包都是从这里下载的。

这个代理是nexus预置的,这里已经将需要修改的部分修改。主要是Download Remote Indexes改为true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 。网络上有一些其他公开的maven仓库,可以用同样的办法,在nexus中设置proxy,但是并不是所有maven仓库,都提供了nexus index,这种情况下,就无法建立索引了。

四、配置预置的Hosted Repository

这里预置的三个hosted repository分别是3rd party、Snapshot、Releases。它们的作用分别是:

3rd用来保存第三方jar包;
Snapshot用来保存项目组内部的快照;
Releases项目组内部的发布版;

这里需要修改的是,将Snapshot中的Deployment Policy这个选项设置为Allow Redeploy。Releases和3rd party设置为禁止。

五、配置group repository

group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露出一个统一的地址,这样在我们引入私服地址的时候,不需要写太多个地址(其实就是central、Releases、3rd party、Snapshot的集合)。

六、配置用户密码

在Security–>Users中配置,在deployment用户上点击右键,选择Set Password,然后设置一个密码,做这个操作是为了后面提交做准备。

七、配置eclipse的setting.xml

在新版的eclipse中,已经内置了maven插件。找到setting文件。

附上setting.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <!--本地maven仓库,根据需要修改-->
    <localRepository>D:\00Coding\apache-maven\repo</localRepository>
    <pluginGroups>
    </pluginGroups>
    <proxies>
    </proxies>
    <servers>
        <server>
            <id>nexus-snapshots</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
        <server>
            <id>nexus-releases</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
    </servers>
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>public group</name>
            <url>http://192.168.2.176:9981/nexus/content/groups/public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
</settings>

这里只配置了2个元素mirrors和servers。首先这里配置了一个id为nexus的镜像仓库,地址是前面配置的public group的URL,然后镜像目标是central。

这里插入一个maven源码中的超级pom(maven是一个开源的软件,感兴趣可以查看源码),我们看到里面配置了这样一段:

~~~
<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>  

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>
  ~~~

因此,当本地的maven项目,找不到需要的构件(包括jar包和插件)的时候,默认会到central里获取

所以我们刚刚配置的镜像仓库,mirrorOf也是central,这样本地maven项目对central repository的请求,就会转到镜像仓库上,也就是我们设置的nexus私服上。由于我们在项目的pom里,不会再配置其他的repositories和pluginRepositories元素,所以只要配置一个central的mirror,就足以阻止所有的外网访问。如果pom中还配置了其他的外网仓库,比如jboss repository等,可以把mirrorOf改为*。

至于servers元素,是因为我们把项目内部的构件上传到nexus的仓库中时,nexus会进行权限控制,所以这里需要设置 权限相关的信息。注意这里的id是nexus-snapshots,以及nexus-releases。后面maven工程里的pom设置是一致的。可以在servers里面配置多个server,比如nexus-releases可以对应是发布版本,nexus-Snapshot是项目快照版本。

八、配置maven项目的pom文件

这里parent是打成pom形式,主要是对jar的一些维护。直接看私服部署到私服nexus上的配置吧!

这里配置了distributionManagement元素,其中的id属性的值nexus-snapshots与前面说的settings.xml中的servers元素中的配置必须一致。配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址,而是snapshots的地址:

http://192.168.2.176:9981/nexus/content/repositories/snapshots/

但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到。

附上parent.pom,包含了一些springmvc需要的依赖。

<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>com.cincc.crm</groupId>
    <artifactId>crm-parent</artifactId>
    <version>3.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- spring版本号 -->
        <spring.version>4.3.0.RELEASE</spring.version>

        <!-- mybatis版本号 -->
        <mybatis.version>3.4.0</mybatis.version>

        <!-- log4j日志文件 版本号 -->
        <slf4j.version>1.7.21</slf4j.version>
        <log4j.version>1.2.17</log4j.version>

        <!-- mybatis-spring版本号 -->
        <mybatis-spring.version>1.3.0</mybatis-spring.version>

        <!-- mysql版本号 -->
        <mysql.version>5.1.39</mysql.version>

        <!-- com.alibaba druid版本号 -->
        <druid.version>1.0.20</druid.version>

        <!-- jackson版本号 -->
        <jackson.version>2.7.4</jackson.version>

        <!-- json版本号 -->
        <json.version>1.9.13</json.version>

        <!-- lucene版本号 -->
        <lucene.version>6.0.1</lucene.version>

        <!-- commons-fileupload.version -->
        <commons-fileupload.version>1.3.2</commons-fileupload.version>
        <!-- servlet版本包 -->
        <servlet.version>2.5</servlet.version>

    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- junit测试包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>

            <!-- spring核心包 -->
            <!-- springframe start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- springframe end -->

            <!-- mybatis核心包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!-- mybatis/spring包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!-- mysql驱动包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!-- 阿里巴巴数据源包 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!-- jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- json数据 -->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>${json.version}</version>
            </dependency>

            <!-- 日志文件管理包 -->
            <!-- log start -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <!-- log end -->

            <!-- lucene -->
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-core</artifactId>
                <version>${lucene.version}</version>
            </dependency>
            <!-- commons-fileupload -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <!-- servlet api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>${servlet.version}</version>
                <scope>provided</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>
    <!-- 配置部署的远程仓库 -->
    <distributionManagement>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://192.168.2.176:9981/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Release Repository</name>
            <url>http://192.168.2.176:9981/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

九、Eclipse上部署Snapshot到私服。

选择你需要部署到私服的项目,首先这个项目应该是一个Snapshot版本。然后右击,选择Run As

保存后,点击Run就可以了。然后在Nexus上的Snapshot仓库里就可以看到啦!就是这么简单。

然后在project-war中,和引入其他依赖一下,引入这个Snapshot版本的包就行了。

时间: 2024-07-29 10:09:57

Nexus私服搭建、配置、上传snapshot的相关文章

nexus搭建maven私服及私服jar包上传和下载

nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.nexus搭建maven私服及相关介绍 1.下载nexus-2.12.0-01-bundle.zip(版本随意) 2.以管理员身份运行cmd,cd进入解压文件的bin目录,执行nexus.bat install 若未以管理员身份运行则安装

精简nexus私服搭建

maven对项目源码和依赖管理的好处不言而喻,不过所依赖仓库都是外网那些常用提供的仓库地址,基于安全,当外网环境有限制,或私有共通jar需共享时,则会需要搭建内部私服,以下说明基于Linux环境. 1. maven 安装   安装很简单,主要就几个步骤和设置. a.  wget 安装包下载地址;   b.  tar zxvf 压缩的安装包 (如果需要安装到指定位置将包移动 : mv  源路径  目的地址; ); c. 配置环境变量   编辑 vi /etc/profile  且增加  expor

Nexus私服安装配置常用问题

maven私服安装配置 软件安装及基本配置 安装配置 # 安装jdk,参考其他教程 mkdir -p /app/nexus2 # 创建目录 wget https://download.sonatype.com/nexus/oss/nexus-2.14.8-01-bundle.tar.gz # 解压 tar -zxvf nexus-2.14.8-01-bundle.tar.gz # 修改配置, 在头部添加配置"export RUN_AS_USER=root" vim /etc/profi

Nexus 私服安装配置(一) - 浮塵的博客

mavenCentral 是最早的 maven 中央仓库,Nexus 是常用的私用 Maven 服务器, Nexus 被超过10万个开发团队所使用. 下载Nexus-3.16.1 unix 准备工作 java 环境(最好yum,不用自己配置java HOME),不详细说google Nexus 安装目录及用户 Nexus tar [curl or wget] Nexus 目录及用户 Folder cd /opt wget https://*/**/nexus-3.16-*.tar.gz mkdi

【技术教程】教你如何用废旧电脑搭建服务器上传网站

[技术教程]教你如何用废旧电脑搭建服务器上传网站 一.教程所需要的工具 电脑一台(需要未分配的硬盘容量,我分出80G来用) U盘(centos7的启动盘,5g足够) 网线(接在路由器上,在局域网连接访问) 二.具体操作 制作启动盘: 硬盘有未分配的容量 安装linux系统(既然是当服务器,那就最小安装) 具体操作请百度,当初我刚开始安装也耗费了好多时间,其中要注意的是,系统默认启动盘是windows,而不是硬盘,当初我没注意,安装四五遍才发现问题,所以安装的时候要注意 配置网卡ip 安装宝塔(本

SpringMVC中配置上传文件大小

配置上传文件的最大值(无论单文件还是多文件,总大小)为配置值 注意: 在实际项目开发中,Spring文件上传实际要考虑2方面的设置: 1.以下的maxUploadSize - "真正的上传文件限制大小",一旦超过就上传失败!应该有异常处理器转发报错页面. 2.如使用Tomcat服务器,则还须配置server.xml中的maxSwallowSize(默认为2M左右),上传文件的大小不能"太大",一旦超过了 maxSwallowSize,则浏览器会被"重置&q

Maven基础配置—上传jar包到私服

一.配置 在需要上传的工程中的pom.xml文件中加入下面的配置 <distributionManagement> <repository> <id>release</id> <name>Release Repository</name> <url>http://ip/nexus/content/repositories/releases</url> </repository> <snapsh

ava Maven项目之Nexus私服搭建和版本管理应用

目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问.利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact.我们可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理. 2.环境.软件准备 本次演示环境,我是在本机mac上操作,以下是我本地软件及版本

七牛C#语言搭建javascript上传--包含后端请求token(前端javascript+后端c#)

Qiniu 七牛问题解答 很多用户反应不会自己搭建javascript的工程,因为涉及到请求服务端的token,在我的博客中包含了(javascript前端+后端java)的工程demao. 问题解决方案 点击这里写在完整的工程 1,首先你要打开你的vs,建一个asp.net的web项目.然后在你的网站建一个asp的web页面,拷贝以下代码进去: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=