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


1.搭建Maven私服背景

公司還是按捺不住,要搭建一個自己的Maven本地倉庫,可以讓開發人員down架包,從內網還是快很多。

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

 

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

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

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>
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM