天天看點

上傳jar包到Nexus

目錄

  • 一.簡介
  • 二.手動上傳jar包
    • GAV Parameters
    • From POM
  • 三.指令行自動上傳

Maven預設提供的中央倉庫是在遠端網絡服務Appache提供的,這對于我們開發時不合理的。如果我們沒網了或者什麼情況,我們怎麼辦?我們需要的jar包中央庫沒有或者是要收費怎麼辦?也就是說我們隊中央倉庫的依賴性太大。而Nexus私服則可以解決我們這個問題。

這樣就相當于在我們本地的區域網路搭建了一個類似中央倉庫的伺服器,我們開始将中央倉庫的一些資料下載下傳到私伺服器上,然後平時我們的maven項目就是直接通路區域網路内的私服即可,既節省了網絡帶寬也會加速項目搭建的程序,這樣對我們開發來說,對公司來說都是非常好的選擇。項目内部和項目與項目之間也可以共享jar包,達到代碼的最大化利用。

一般有兩種情況需要我們上傳jar包至nexus,一個是本地項目生成的jar包,另一個是我們從第三方拿過來的的中央庫中不存在的jar包,前者采用maven工程deploy的方法,後者采用手動上傳的方式。

GAV Parameters方式隻能上傳單個jar包,無法攜帶依賴。

示例中使用的jar包為:geogson.jar包,基本資訊:

<dependency>
  <groupId>com.nsn.geogson</groupId>
  <artifactId>geogson</artifactId>
  <version>1.0.0</version>
</dependency>
           

1.首先登陸nexus,進入3rd party,選擇Artifact Upload

上傳jar包到Nexus

2.填寫相應的資訊,版本等等

上傳jar包到Nexus

3.添加後送出

上傳jar包到Nexus

4.導入成功後,search該包顯示如下:

上傳jar包到Nexus

From POM方式,可以将上傳jar包的依賴一起上傳。例如:我們想傳a.jar到私服,但是a.jar還依賴b.jar,假如隻傳a.jar到私服,在項目中會因為找不到a.jar的依賴(b.jar)而報錯。

當需要導入DB2驅動時,需要db2jcc.jar,而db2jcc.jar又要依賴db2jcc_license_cu.jar,此時,導入方式如下

1.編寫POM

手動編寫db2jcc.jar的pom.xml,如下:

<project ...>

  <modelVersion>4.0.0</modelVersion>
  <groupId>xxx.xxx.db2driver</groupId>
  <artifactId>db2jcc</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0</version>
  <name>db2jcc</name>

  <dependencies>
    <dependency>
      <groupId>xxx.xxx.db2driver</groupId>
      <artifactId>db2jcc-license-cu</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>
</project>
           

2.在Nuxus的GUI中導入

導入方式如下:

上傳jar包到Nexus

3.導入依賴的jar

導入依賴的db2jcc_license_cu.jar,如下:

上傳jar包到Nexus

注意這裡的配置必須按照1中的配置。

最後,確定所有依賴的jar全部導入進第三方宿主倉庫後,就可以在工程中引入,配置如下:

<dependency>
      <groupId>xxx.xxx.db2driver</groupId>
      <artifactId>db2jcc</artifactId>
      <version>1.0.0</version>
</dependency>
           

1.如果本機安裝了Maven服務, 可在${MAVEN_HOME}/conf/setting.xml中指定私服相關的配置

 <!-- 在servers标簽下配置server, 包括: 私服的使用者名和密碼, 在deploy項目時需要用到 -->
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>

    <!-- 在profiles标簽下配置profile, 包括: 私服所配的倉庫、各個插件的倉庫位址 -->
    <profile>
      <!-- profile的id -->
      <id>dev</id>
      <repositories>
        <repository>
          <!-- 倉庫id, Repositories可以配置多個倉庫, 要確定id不重複 -->
          <id>nexus</id>
          <!-- 倉庫位址, 即nexus倉庫組的位址 -->
          <url>http://ip:port/nexus/content/groups/public/</url>
          <!-- 是否下載下傳Releases構件 -->
          <releases>
            <enabled>true</enabled>
          </releases>
          <!-- 是否下載下傳Snapshots構件 -->
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>

      <pluginRepositories>
        <!-- 插件倉庫, Maven的運作依賴插件, 也需要從私服下載下傳插件 -->
        <pluginRepository>
          <!-- 插件倉庫的id不允許重複, 如果重複, 後配置的優先 -->
          <id>public</id>
          <name>Public Repositories</name>
          <url>http://ip:port/nexus/content/groups/public/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>

    <!-- 還需指定聯網倉庫, 保證本私服中沒有相關jar包或插件時可聯網擷取 -->
    <profile>
      <id>internet</id>
      <repositories>
        <repository>
          <id>nexus-aliyun</id>
          <name>Nexus aliyun</name>
          <layout>default</layout>
          <!-- 這裡配置阿裡雲的倉庫 -->
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>
    </profile>
           

2.在項目的pom.xml中的一級标簽project下添加如下内容:

    <!-- 釋出選項: id必須與setting.xml檔案中server的id相同 -->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>display</name>
            <url>http://ip:port/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>display</name>
            <url>http://ip:port/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
           

3.使用IDEA釋出項目

以IDEA為例, 選中項目, 右鍵 -> Run Maven -> deploy

或者在右邊欄選中Maven欄目, 點選項目 -> Lifecycle -> deploy, 執行即可将項目釋出到倉庫中去

4.使用釋出項目

/usr/local/maven/bin/mvn clean deploy -e -U

注意: 倉庫中不能存在與目前項目名稱+版本号相同的項目, 否則将導緻出錯: Bad Request: 400

本文版權歸作者所有,歡迎轉載,請務必添加原文連結。