maven裏有本身的項目嗎?今天我就來發布個本身的包

這是我參與更文挑戰的第13天,活動詳情查看: 更文挑戰java

[TOC]linux

bottom.png maven項目的發佈git

平時開發中都是使用別人的maven項目,做爲一個標準的程序員發佈個本身的程序也是必要的。程序員

工單申請

  • 在發佈前,您須要有本身的項目主頁並開源的代碼,您可使用GitHub或者碼雲,下面的內容以Oschina爲例,換句話說咱們須要將咱們的項目源碼發佈到碼雲平臺上。畢竟maven是開源精神。因此必須須要將你的源碼提供給maven

註冊Sonatype OSSRH

  • 其次,咱們須要在sonatype平臺申請,若是有帳號就直接登陸sonatype登陸,沒有的話在登陸界面也能夠點擊註冊github

  • 註冊完帳號以後咱們能夠登陸sonatype平臺,開始建立工單apache

建立工單

  • 如今我建立好了本地項目,座標是
<groupId>com.github.zxhTom</groupId>
<artifactId>csdn-sdk</artifactId>
<version>1.0.0</version>
複製代碼
  • 那麼我建立的工單信息以下

工單詳情 工單成功

  • 建立完工單咱們須要等待3~5分鐘,咱們就會收到郵件告訴咱們工單建立成功!這裏的郵箱是在註冊的時候填寫的,這裏就很少說了。建立完工單咱們能夠在本身帳號中查找也能夠去首頁查找,應爲是剛建立的在首頁中最近的幾條工單信息中會出現咱們的工單列表(首頁是按時間倒敘的)。因此在查找之前建立的工單是咱們只能去本身工單列表中查找。

工單列表

工單參數

屬性值 屬性解釋
Summary 這就是項目說明,你直接能夠寫我的項目,搞個統稱就行
Project URL 你就填寫你的github或者git.oschina.net 的,或者我的主頁也行
SCM URL 寫成和Project URL 同樣也沒啥事
username 用戶名

這裏須要特別說明的是 Group Id,若是你是託管在 Github 或者 Git@OSC 可使用 com.github.binarylei 或者 net.oschina.XXX,剩下的能夠依照實際狀況填寫,例如託管的地址等等(託管地址等信息會在用去 maven 倉庫搜索的時候顯示,用來幫助用戶找到你的項目地址尋求幫助)。另外此處填寫的 groupId 必須和你要發佈的組件的 pom 中的 groupIdd 同樣,必須同樣!!!windows

工單等待

  • 上面咱們已經成功建立了工單,可是審覈仍是須要等待一會的。正常等待1~5小時。這個看我的運氣。個人如今仍在等待中。等待的過程一切工單的狀態客服人員都會在你的工單下comments下進行評論的,咱們也能夠(必須)在下面對客服人員的問題進行回覆。

comments

-----------------------------------漫長的等待-----------------------------------緩存

  • 好了通過漫長的等待,咱們建立的工單終於獲得了回覆。由於com.github.zxhTom這個groupid我以前註冊申請過,因此這裏sonatype回覆我不會再次給我建立工單,讓我使用以前那個工單。下面來看看兩張工單

![oytmxyuek.bkt.clouddn.com/20181008005…]安全

![oytmxyuek.bkt.clouddn.com/20181008006…]markdown

  • 上面的是我以前建立的工單,能夠看到我在評論去的評論。這是我在和sonatype溝通。其中出現以下回復說明咱們的建立沒有問題

![oytmxyuek.bkt.clouddn.com/20181008007…]

  • 咱們就能夠發佈咱們的項目了,發佈成功後工單會自動回覆信息,告訴咱們其餘倉庫同步的事情。而後你能夠禮貌性回覆下

![oytmxyuek.bkt.clouddn.com/20181008008…]

gpg2加解密

  • 下載好gpg以後咱們就傻瓜式安裝,這裏不細說

  • gpg --version 查看gpg安裝是否成功

gpg版本

  • gpg --gen-key 生成公鑰密鑰

gpg生成

  • gpg --list-keys 查看公鑰 ; 其中pub那一長串就是咱們的就是咱們須要上傳的公鑰id,gpg的版本不一樣所生成的pub id 格式和 長度不一樣。咱們不用擔憂
  • 生成公鑰祕鑰的過程須要咱們輸入passphrase,這個passphrase就是咱們的憑證,必定要記住
  • ps :
    • Real name: 名字
    • Email address: email地址
    • Comment: 描述評論

查看

  • gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公鑰ID
  • 將公鑰發佈外網,下圖中gpg --list-keys 是在另一臺電腦上執行的。版本和上一步那臺電腦版本不同。這裏是給你們看看斑斑不同致使的pub id .這裏咱們只需選擇後面字符

發佈

  • gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公鑰ID 查看公網公鑰

查看公鑰

maven配置

  • 在pom中須要配置doc compile等必須插件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <encoding>UTF-8</encoding>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <optimize>true</optimize>
        <compilerArguments>
            <verbose/>
            <!-- 若是是linux構建須要將分號緩存冒號:, 若是是windows下則用分號 -->
            <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
        </compilerArguments>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.1.2</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <charset>UTF-8</charset>
        <docencoding>UTF-8</docencoding>
        <!-- 容許子項目也是用該插件 -->
        <aggregate>true</aggregate>
        <!-- 因爲如今該插件比較嚴謹,該標籤是忽略嚴格驗證。好比沒有的標籤註解能夠忽略錯誤 -->
        <additionalparam>-Xdoclint:none</additionalparam>
    </configuration>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

複製代碼
  • 上面的過程是硬性的條件準備。準備好了咱們這一步要作的就是配置這些信息。
  • maven爲咱們提供了發佈的工程,咱們只須要繼承就能夠了,可是實際中咱們有本身的基礎工程要繼承,因此繼承只是一種方法。實際上咱們能夠本身從新配置。下面分別實現兩種方式的配置。讀者只需選擇其中一種配置 ps : 兩種方式選擇一中便可>

繼承oss-parent

  • 在咱們的項目的pom文件中繼承oss-parent
<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
</parent>
複製代碼
  • 而後在pom中增長以下配置 , 具體的配置信息改爲本身項目的信息就好了。也是通俗易懂的
<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>1.1</version>
        <executions>
            <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                    <goal>sign</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    </plugins>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <scm>
        <connection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</connection>
        <developerConnection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</developerConnection>
        <url>https://gitee.com/zxhTom/csdnSdk</url>
        <tag>${project.version}</tag>
    </scm>
    <developers>
        <developer>
            <name>zxhTom</name>
            <email>870775401@qq.com</email>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>+8</timezone>
        </developer>
    </developers>
 

複製代碼
  • 而後在maven settings中加上以下配置
<servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>Sonatype 帳號</username>
      <password>Sonatype 密碼</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>Sonatype 帳號</username>
      <password>Sonatype 密碼</password>
    </server>
  </servers>


複製代碼

ps : 這種方式筆者一開始沒有采納,因此沒有親測,可是下面一種方法是我按照第一種變形的。因此這一種應該是能夠的。 剩下的咱們就能夠mvn clean deploy 進行發佈了。發佈的過程須要輸入gpg passphrase驗證。這裏只是配置。真正發佈下面繼續。

![./maven發佈/019.png]

只用配置maven 倉庫(全局)和項目pom (項目)。

settings.xml配置

  • 在settings.xml的servers節點中添加一個server。在其中加入 server 信息,包含 Sonatype 帳號的用戶名與密碼

sonatype帳號密碼

  • 而後就是maven的遠程倉庫了。這裏配置遠程的倉庫就是本身選擇了。這裏很少說給一份默認的遠程地址配置
<profile>
      <id>default_maven</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>central</id>  
          <name>Central Repository</name>  
          <url>http://repo.maven.apache.org/maven2</url>  
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>CentralRepository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

複製代碼
  • 到這裏基本結束了。由於maven發佈須要加解密,上面咱們使用gpg加密,這裏須要將gpg的信息配置成一個profile,這樣mvn deploy的時候就知道gpg了。這時候配置須要用到以前在發佈gpg公鑰的時候我讓你們記住的東西了passphrase。下圖被打馬賽克的就是個人passphrase

  • 這裏配置了,根據版本不同 有的是gpg , 有的是gpg2 . 讀者兩個分別試試就知道本身版本適合哪個了

項目pom配置

  • 和第一種同樣須要增長Licenses、SCM、Developers信息。 下面多了一個repository這是多餘的。讀者能夠自行去掉。由於這個已經在settings.xml全局中profile中配置了,而且是默認激活的。就算settings中沒有配置

maven也是默認讀取這個地址的(遠程中央倉庫)

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
  </plugin>
</plugins>
<licenses>
    <license>
        <name>The Apache License, Version 2.0</name>
        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
</licenses>
<developers>
    <developer>
        <name>zxhTom</name>
        <email>870775401@qq.com</email>
        <roles>
            <role>developer</role>
        </roles>
        <timezone>+8</timezone>
    </developer>
</developers>
<scm>
    <connection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</connection>
    <developerConnection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</developerConnection>
    <url>https://gitee.com/zxhTom/csdnSdk</url>
    <tag>${project.version}</tag>
</scm>
<repositories>
    <repository>
        <id>maven-central</id>
        <name>maven-central</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

複製代碼
  • 惟一不一樣的是,此種方法多了distributionManagement。 distributionManagement中的repository和snapshotRepository中的id必定要和settings中server的id保持一致

  • 這也是爲何第一種方法中server須要配置兩條,由於oss-parent中的distributionManagement兩個id不一樣。而咱們自定義的就能夠定義一致。咱們的settings中就能夠只配置一個server了。

<distributionManagement>
    <snapshotRepository>
        <id>ossrh</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
        <id>ossrh</id>
        <name>Maven Central Staging
            Repository
        </name>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
</distributionManagement>

複製代碼
  • ps : 兩種方法基本是同樣的。只不過一個是maven提供。另外一個自定義而已

發佈jar

  • 好了,前期的準備工做已經完成了。那麼如今咱們開始配置咱們項目和maven就能夠發佈到中央倉庫了。

  • 執行mvn clean deploy 。 我是在idea中執行的 由於gpg已經配置在settings.xml中了,因此後面不用跟gpg信息了。

  • 執行完咱們就能夠在https://oss.sonatype.org中查看咱們剛發佈的項目了,此時尚未發佈到中央倉庫;登陸此網站帳號密碼就是sonatype的。左側build promotion->staging repositories中列表最底下就是應該是咱們發佈的項目

  • 咱們查看到的信息是open狀態,咱們須要注意這個狀態,須要open-->close-->relese 。 最後纔會發佈到中央倉庫,而後同步到其餘maven須要必定時間可能須要幾天

close的時候須要看信息,close失敗會在activity中提示你哪些錯誤的。還有些pom細節這裏不能細說了,時間問題

點我查看個人pom項目(sonatype分支)

  • release成功以後再staging repositories就消失了。在左側搜索 , 搜索到就表示成功,咱們等待就會在中央倉庫搜索到咱們項目

更新項目

  • 出於使用安全的角度考慮,咱們發佈過的構建是不可以修改的。即相同GAV是禁止上傳發布的。GAV(maven座標)
  • 可是咱們能夠發佈snapshot快照版本給團隊開發,由於開發期間項目確定是不斷的變化的。發佈snapshots和發佈releas同樣就是版本號後面多snapshots
  • 並且是發佈以後沒有close--release這個操做,直接mvn deploy就能夠了,可是snapshot在中央倉庫和其餘任何倉庫都搜索不到。搜索不到不表明沒有,在中央倉庫的snapshot倉庫實際上是已經有咱們的構件,只是經過頁面搜索不到。咱們團隊內部本身知道就好了。
  • 換句話說咱們發佈快照對別人來講是隱藏的。可是隻要知道你快照的GAV就可使用。

再次發佈其餘項目

  • 再次發佈只須要執行配置和發佈那兩塊 。 其實就是項目的pom配置 。 以前的工單啥的不須要了。同一個groupid 只須要一個工單, 並且之後都不用關心了。

  • 中央倉庫地址

  • mvn地址

相關文章
相關標籤/搜索