使用Nexus3搭建Maven私服+上傳第三方jar包到本地maven倉庫

1.搭建Maven私服背景

公司仍是按捺不住,要搭建一個本身的Maven本地倉庫,可讓開發人員down架包,從內網仍是快不少。html

這樣公司的maven本地倉庫就是 開發人員本身電腦上的maven倉庫  和    Maven遠程倉庫  之間的一個緩衝倉庫。java

 

那要構建一個maven私服,須要用到Maven倉庫管理軟件,關於Apache Archiva,Artifactory,Sonatype Nexus的區別,有下面這些的參考對比:git

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

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

 

 

2.安裝Nexus,並初次啓動Nexus

這裏咱們下載開源版 Nexus OSS。Nexus 提供兩種安裝包,一種是包含 Jetty 容器的 bundle 包,另外一種是不包含容器的 war 包。下載地址:http://www.sonatype.org/nexus/go數據庫

這裏先以windows上爲例【Linux上以後再來一份】apache

 

在你點擊下載以後,會有Read THE BOOK 的入口和加入NENUX社區的入口。windows

這裏直接給你ReadTheBook的地址:https://help.sonatype.com/display/NXRM3api

這裏你能夠找到官方提供的完整安裝和使用教程。【由於這裏使用的是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>
複製代碼
相關文章
相關標籤/搜索