【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

参考文章:html

http://www.cnblogs.com/luotaoyeah/p/3791966.htmljava

------------------------------------------------------------------------------------------------------------------------------------------------------------------git

参考文章介绍的很是详尽,本身写下来这个,只是以作笔记的形式走一走本身的历程,人笨,仍是记下来的好。github

=====================================================================================================spring

1.搭建Maven私服背景

公司仍是按捺不住,要搭建一个本身的Maven本地仓库,可让开发人员down架包,从内网仍是快不少。数据库

这样公司的maven本地仓库就是 开发人员本身电脑上的maven仓库  和    Maven远程仓库  之间的一个缓冲仓库。apache

 

那要构建一个maven私服,须要用到Maven仓库管理软件,关于Apache Archiva,Artifactory,Sonatype Nexus的区别,有下面这些的参考对比:windows

http://blog.sina.com.cn/s/blog_72ef7bea0102vq0k.htmlapi

http://www.sonatype.org/nexus/2015/02/23/migrating-from-artifactory-archiva-or-a-raw-maven-repository-to-sonatype-nexus/浏览器

 

 

2.安装Nexus,并初次启动Nexus

这里咱们下载开源版 Nexus OSS。Nexus 提供两种安装包,一种是包含 Jetty 容器的 bundle 包,另外一种是不包含容器的 war 包。下载地址:http://www.sonatype.org/nexus/go

这里先以windows上为例【Linux上以后再来一份】

 

在你点击下载以后,会有Read THE BOOK 的入口和加入NENUX社区的入口。

这里直接给你ReadTheBook的地址:https://help.sonatype.com/display/NXRM3

这里你能够找到官方提供的完整安装和使用教程。【由于这里使用的是Nexus3的版本,和参考文章中不大一致】

 

下载的压缩包解压下来

 

而后cmd,命令窗口进入nexus-3.5.2-01目录下的bin目录下,按照官方的启动方式,须要在bin目录下使用nexus /run命令启动,以下图

确认以后,下面会打印出来启动的相关信息,接下来,耐心等待它启动完成。

直到出现下面这个,才算启动完成。

 

 

初次启动以后,你能够在浏览器上访问nexus这个maven管理器

地址:http://localhost:8081/

固然,你可使用默认的用户登陆。

用户名:admin

密码:admin123

 

此时,观看命令窗口,会有记录相关的操做记录。

 

 

 3.将nexus配置为系统服务

根据官方文档说明,将nexus配置为系统服务是一个很好的选择。由于

第一:上面的安装和启动过程并无默认的把nexus做为服务加入系统服务中;

第二:这样下次服务器重启,服务也会重启。

可是这个有个前提,就是已经确保安装了Java运行时环境。

 

 

接下来,咱们从新打开一个窗口,去将nexus加入系统服务  

最后的<optional-service-name>,我们直接命名成nexus就好。【固然,最后这个不指定的话,默认就是建立成nexus服务名】

在windows7上安装nexus为系统服务时,报错:could not open SCManager 

可是报错以下:

 

解决方法:

 

而后再次运行

若是再解决不了,那就在

直接以管理员身份运行这个命令提示符,而后安装服务。

 

显示安装成功以后,能够进入控制面板---》管理工具---》服务  

查找名为nexus的服务

 

你能够选择,点击上面的启动按钮启动服务,也能够用下面的命令启动服务

【固然,能够在上面配置启动参数,这个以后再去查看配置】

 

 

启动完成以后,试着访问一下http://localhost:8081/

 

由于上面服务是自动的。

重启电脑以后,再次访问,能够访问到,完美。

 

 

4.配置nexus和熟悉它

第一步,跟随着说明文档,看看下载nexus下来以后,有两个目录

nexus-3.5.2-01    安装目录

bin    包含nexus的启动脚本和相关配置      

etc    jetty、karaf等配置文件

jre    jre环境

lib    java架包库

public  关于nexus应用在本地跑起来所须要的资源

system  应用全部的插件和组件

LICENSE.txt 和 NOTICE.txt    版权声明和法律细则

 

sonatype-work\nexus3    数据文档

blobs/      建立blob的默认路径,若是你指定了绝对路径,那就不在这里了

cache/      当前缓存的karaf包的信息

db/        OrientDB数据库的数据,用于存储nexus的元数据的数据库

elasticsearch /    当前配置的Elasticsearch状态

etc/          大概是运行时配置状态和关于资源库的自定义的相关的东西

health-check/      看目录,健康检查的相关报告的存储目录吧

keystores/        自动生成的关于资源库的ID主键

log/            运行实例生成的日志文件,也有日志文件的压缩包,貌似是天天都会生成日志文件,你能够按期删除老的日志文件

tmp/            用于存储临时文件的目录

 

具体每一个目录下的各个配置文件的做用,请参考官方文档说明:https://help.sonatype.com/display/NXRM3/Installation

 

若是你想配置nexus的应用在本地启动的JVM参数,能够在nexus.vmoptions

 

若是你想改变nexus的端口号,能够在nexus-default.properties

 

 

5.搭建maven私服资源库

因为如今使用的nexus3,因此在nexus应用上资源库初始化目录和nexus2有很大的不一样,可是类型都是同样的。

第一步:首先http://localhost:8081/

登陆上nexus,未登陆的状态下是这样的。

使用默认用户名admin密码admin123登陆后,以下

 

第二步:使用nexus3要搭建maven私服的核心功能

在nexus安装并启动以后,我大概的把整个nexus的官方说明文档走了一遍,主要就是介绍了左侧菜单中的各个功能模块。https://help.sonatype.com/display/NXRM3/Configuration

有兴趣去看看,仍是颇有帮助的。

====================================================================================================================

-------------------------------------------------------------------------------------普及-----------------------------------------------------------------------------------------------------------------

上面提到的一点,无论nexus版本是怎么样的,至少,repository的类型是同样的。

先看一下大概的目录结构:

根据多方的文档和别人的博客,再综合官网的解释,我就这样理解得出:

资源库也就是这么三种,如上图中  【代理资源库】【托管资源库】【组资源库】,其实名字就是我本身瞎起的。

具体解释一下:

【代理资源库】:就是配置了外网的maven远程仓库地址的资源库,本地找不到,就会经过代理资源库中的地址,找到远程仓库,从远程仓库中下载所须要的jar。

【托管资源库】:就是放在本地的资源库,零零散散的jar,从远程仓库中下不到,只能本身在网上找,找到jar下载下来,放在托管资源库中,交给nexus统一管理。否则哪天想去用链接数据库的jar包,还得本身翻磁盘,多麻烦。

【组资源库】 :从上面①+②看出来,其实组资源库中并无jar包,而是把代理资源库和托管资源库统一配置到组资源库中,而后组资源库做为一个惟一的public提供给全部人使用。就像工人1+工人2把本身的帐单统一给包工头,让包工头去跟老板结帐是一个道理。

 

好,明确了这一点,开始往下看吧。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

若是你想直入主题,往下看。

①在建立 repository以前,仍是须要先设定一个指定的文件存储目录,便于统一管理。

 由下面新建的完成的,能够看出,

 

 

②第二步,建立Proxy Repository  代理资源库

建立页面出来以后,页面上有三个input框是必填的:

 远程Maven地址:https://repo1.maven.org/maven2/

 

其余的不用更改了。保存就行了。

 

【注意】:我想建好几个proxy repository,以便于我能够加入更多的远程maven仓库到个人group 资源库中

惟一一点,就是你看你加入的proxy资源库哪一个使用的是国内的maven仓库地址,哪一个是国外的。

固然国内的要放在国外的以前。

这样的加入group资源库的顺序就是  hosted资源库>国内proxy资源库>国外proxy资源库

下面给出一些maven远程仓库的地址:

jboss的maven中央仓库地址:http://repository.jboss.com/maven2/

阿里云的maven中央仓库地址:http://maven.aliyun.com/nexus/content/groups/public/

apache的maven中央仓库地址:http://repo.maven.apache.org/maven2/

 

 

 

③第三步,建立hosted repository 托管资源库

Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 通常是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的

 

 

④第四步,建立group repository  组资源库

为何要注意顺序??

官方文档中建议:

 It is recommended practice to place hosted repositories higher in the list than proxy repositories. For proxy repositories, the repository manager needs to check the remote repository which will incur more overhead than a hosted repository lookup.

但愿将hosted repositories【托管资源库】的顺序放在proxy repositories【代理资源库】以前,由于一个group【组资源库】中能够涵括这些托管资源库和代理资源库。而一整个的group是做为一个public,一个接口给别人使用的。因此当查找架包的时候,若是代理资源库在前面,那就是先从远程去查找jar,而不是先从托管资源库(本地仓库)去查找是否有jar。这样访问外网的消耗比起来在本地查找,固然是将托管资源库放在代理资源库以前的优先位置了。

 

 

⑤第五步,比较nexus中默认提供的

好吧,从命名上也能够看出来,系统自带的命名能够看出来这个资源库是什么类型中的什么类型的。【没有建立未发布的资源库,那之后我们本身想去建立的,自行建立,再加入到group中就好了】

 

若是你想,能够本身去建立一个新的admin,新的用户名,新的密码,新的权限。供下面使用。

 

6.让maven项目用到刚刚搭建的maven私服

==========================================================我的理解===============================================================

maven下的setting.xml文件和你本身项目中的pom.xml文件的关系:

    Ⅰ.settting.xml文件就是本地,电脑上的全局变量;而pom.xml文件就是局部变量。

    Ⅱ.本身建立的pom.xml文件确定对于项目来讲,优先使用的。然而pom.xml文件中若是没有指定jar要从哪里下载的话,也就是说没有配置镜像地址的话,固然只能去按照全局变量中定义的地址去找了

    Ⅲ.那怎么去找我们的全局变量呢?其余人多是直接在pom.xml文件中配置指定的方式。我是使用的IDE【编译工具】中直接指定肯定的setting.xml文件,这样在pom.xml文件中没有的状况下,个人IDE就按照设定的去找对应的setting.xml文件去。

 

 

【注意】:有一点要注意的就是,maven若是是你本身下载的,那里面确定会有一份setting.xml文件。什么都不配置的话,它所有都是按照默认值去干的,例如本地仓库它默认的就是放在用户/.m2/文件夹下的。

【忠告】:在修改setting.xml文件以前,先备份一份原始的。我的感受里面的注释是很是有参考价值的。

 

下面开始解释具体的详细步骤:

 

最简单的使用方式:

①在原始的setting文件中加入

拷贝的这个地址,就是下面即将在setting.xml文件中添加时使用的。能够对应下面的setting.xml文件中看。

  <!--http://www.cnblogs.com/sxdcgaq8080/p/7580964.html 有详细教程-->
  <!--就是配置maven本地仓库的地址为自定义的地址-->
  <localRepository>D:\apps\repository</localRepository>
  <!--nexus服务器-->
  <servers>  
    <server>  
        <id>nexus</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>   
  </servers>  
  <!--组资源库的url地址  id和name自定义,mirrorOf的值设置为central,写死的-->  
  <mirrors>     
    <mirror>  
        <id>nexus</id>  
        <name>nexus repository</name>  
        <url>http://localhost:8081/repository/myself_group/</url>  
        <mirrorOf>central</mirrorOf>  
    </mirror>     
  </mirrors>  

 

②按照http://www.cnblogs.com/sxdcgaq8080/p/7580964.html教程,把IDE指定为这个setting.xml文件便可。

 

③在新建的maven项目中的pom.xml文件中,添加一个本来本地仓库中没有下载过的架包【新建maven项目的过程:http://www.cnblogs.com/sxdcgaq8080/p/5586644.html】

 

你本身的项目中pom.xml文件并不须要改变什么东西,之前怎么用,如今还怎么用。

例以下面:

这是我新建的一个maven项目

 

 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>com.sxd.testP</groupId>
  <artifactId>mavenProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
      <plugins>
          <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <configuration>
                  <version>3.1</version>
              </configuration>
          </plugin>
      </plugins>
  </build>
  
  <!-- 这一段是新添加的,这一段以外的都是建立maven项目时,它本身生成的pom.xml文件框架 -->
  <dependencies>
      
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
        
  </dependencies>
  
  <!-- 这一段结束 -->  
  
</project>

 

而后保存pom.xml文件以后,

在本地仓库中

 

 这个就算你不建私服,只要指定了本地仓库自定义的地址,通常都会下载成功的。

 

下面看看私服中是否有这个东西

http://localhost:8081/    admin、admin123登陆进入[不登录也能够搜索,这看你本身会给游客这种角色分配什么样的权限了]

点开查看:

点进入jar包的这个概要信息

 

 

查找发现,后面的那一串应该相似于UUID的字符串 能够查找到  

原来nexus把下载下来的全部文件都转化成了byte文件。这也难怪在上面建立

是使用的blob这个单词。二进制的意思吧!!!

 

 

 

 

 

=========================================================================================================================================

至此,maven私服搭建,以及使用maven项目使用maven私服已经所有连通。

若是想看详细的配置的话,能够在GitHub上查看:https://github.com/sonatype/nexus-book-examples

=========================================================================================================================================

7.使用命令上传第三方jar到nexus

 

最后的最后,就是还有一部分,我们没有走。

使用nexus2的话,能够在界面上直接上传第三方的jar到上建立的hosted资源库,也就是托管资源库中。

但是nexus3在页面我愣是找了半天也没有找到。同时官方的说明文档我查了一半,貌似也没有发现。因此,页面上既然没有这个功能,就只能本身使用命令上传第三方jar到nexus了。

 

示例:

上传一个处理word的jar包到nexus上。

jar包为jacob

咱们先在nexus上搜索一下:下面是搜不出来的

 

 

步骤1:

把hosted资源库,也配置到maven的settting.xml文件中

添加下面:

<!--id自定义,可是在使用命令上传的时候会用到-->
<
server> <id>myself_hosted</id> <username>admin</username> <password>admin123</password> </server>

到目前为止,个人settting.xml文件也就是下面这些东西

 

 

 步骤2:

 使用

如下命令

mvn deploy:deploy-file -DgroupId=sxd.jar -DartifactId=jacob -Dversion=1.18 -Dpackaging=jar -Dfile=G:\jar\jacob-1.18.jar -Durl=http://localhost:8081/repository/myself_hosted/ -DrepositoryId=myself_hosted

命令解释:

-DgroupId=sxd.jar                           自定义
-DartifactId=jacob                          自定义
-Dversion=1.18                            自定义  三个自定义,构成pom.xml文件中的坐标
-Dpackaging=jar                           上传的类型是jar类型
-Dfile=G:\jar\jacob-1.18.jar                   jar的本地磁盘位置
-Durl=http://localhost:8081/repository/myself_hosted/    hosted资源库的地址,下图中
-DrepositoryId=myself_hosted                   setting.xml文件中配置的ID

 

 

 

 上传完成,再nexus中查看一下:

 

 

上传成功!!!

步骤3:

在项目的pom.xml文件中引入一下jar包

     <dependency>
            <groupId>sxd.jar</groupId>
            <artifactId>jacob</artifactId>
            <version>1.18</version>
            <scope>provided</scope>
        </dependency>

保存pom.xml文件。

这下,发现maven下已经引入成功。而且已经将这个jar包放入本地maven仓库了。

 

彻底成功了。

 

==========================================================================================================================================================

 这个整个的过程,花费了一个周末+2天的时间!

==========================================================================================================================================================

附赠:若是上面的方法失败,可使用这个方法上传已经存在的第三方jar包到本地maven仓库

 

例如个人本地有几个第三方的jar,你想直接上传本地的maven仓库

1.有几个第三方的jar

 

2.编辑上传命令install

导入第三方jar的命令

mvn install:install-file -Dfile=D:\document\IdeaProjects\myTestDocument\jar\transaction-springcloud-4.2.0-SNAPSHOT.jar -DgroupId=com.codingapi -DartifactId=transaction-springcloud -Dversion=4.2.0-SNAPSHOT -Dpackaging=jar

导入第三方pom文件的命令【留做参考】

mvn install:install-file -Dfile=D:\document\IdeaProjects\myTestDocument\jar\tx-lcn-4.2.0-SNAPSHOT.pom -DgroupId=com.codingapi -DartifactId=tx-lcn -Dversion=4.2.0-SNAPSHOT -Dpackaging=pom

 

 

 

3.上传完成后,能够将source的jar直接拷贝到maven仓库中

本地maven仓库中展现已经上传成功的jar目录

将source 直接拷贝到此处便可【若是没有source就算了】

 

 

 4.最后,就能够在本身的项目中引用了

<dependency>
            <groupId>com.codingapi</groupId>
            <artifactId>transaction-springcloud</artifactId>
            <version>4.2.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.codingapi</groupId>
            <artifactId>tx-plugins-db</artifactId>
            <version>4.2.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

 

便可!!!!!

相关文章
相关标签/搜索