發布java項目到maven中央庫__maven

來源:互聯網
上載者:User
Table of Contents What is Maven? Maven 中央庫 如何將jar包發布到Maven中央庫 註冊Maven中央庫帳號 向Maven中央庫申請一個倉庫 本地Maven配置(官方說明) 使用GPG對java項目包進行簽名(官方說明) 使用mvn(Maven)進行打包上傳 正式 Release 項目 如果是第一次發布,需要通知管理員啟用該倉庫和Maven中央庫的同步 注意的問題
What is Maven?

Maven就是一套專案管理架構:
一個項目物件模型 (Project Object Model),
一組標準集合,
一個專案生命週期(Project Lifecycle),
一個依賴管理系統(Dependency Management System),
和用來運行定義在生命週期階段(phase)中外掛程式(plugin)目標(goal)的邏輯。 Maven 中央庫

Maven可以自己搭建,也可以使用線上搭建好的Maven平台,Maven 中央庫就是一個線上提供java項目託管的Maven平台。將項目發布到Maven中央庫後,其他人就可以根據項目的名稱或Id直接擷取到相應的jar包,同時Maven還解決了項目依賴的問題。(類似Python社區的pypi) 如何將jar包發布到Maven中央庫 註冊Maven中央庫帳號

在 [http://oss.sonatype.org] 註冊帳號(註:Sonatype是Maven中央庫的管理系統),註冊之後獲得使用者名稱,密碼。 向Maven中央庫申請一個倉庫

在Sonatype的JIRA系統中,建立一個issue(選擇Project: Community Support - Open Source Project Repository Hosting; Issue Type: New Project),告訴Sonatype管理員,你想託管一個項目到Sonatype上。注意該Issue建立完之後,只有管理員有更改許可權,因此,小心不要寫錯資訊(詳見官方說明)。建立完之後,需要等待Sonatype管理員審核,一般不超過2個工作日,一旦審核通過,會在該Issue上標明Resolved,這就是說中央庫已經準備好,可以隨時上傳自己的檔案了。 本地Maven配置(官方說明)

本地需要安裝工具:JDK && Maven,Maven安裝方法詳見文檔,以及GPG簽名工具

告訴Maven我們之前在Maven中央庫上申請的帳號,即在maven工具的設定檔~/.m2/settings.xml中添加如下:

    <server>        <id>sonatype-nexus-snapshots</id>        <username>USERNAME</username>        <password>PASSWORD</password>    </server>    <server>        <id>sonatype-nexus-staging</id>        <username>USERNAME</username>        <password>PASSWORD</password>    </server>

然後就是修改位於項目根目錄的pom.xml檔案,這個檔案是Maven行為的總指揮設定檔,類似於Makefile,用來告訴Maven關於項目編譯,打包,簽名,依賴對象在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.coaku</groupId>        <artifactId>sdk</artifactId>        <version>1.1.1-SNAPSHOT</version>        <packaging>jar</packaging>        <name>java-sdk</name>        <url>http://www.coaku.com/</url>        <description> Qiniu Resource (Cloud) Storage SDK demo for Java</description>        <licenses>            <license>                <name>The MIT License</name>                <url>http://opensource.org/licenses/MIT</url>            </license>        </licenses>        <parent>            <groupId>org.sonatype.oss</groupId>            <artifactId>oss-parent</artifactId>            <version>7</version>        </parent>        <scm>            <connection>scm:git:git@github.com:coaku/java-sdk.git</connection>            <developerConnection>scm:git:git@github.com:coaku/java-sdk.git</developerConnection>            <url>git@github.com:coaku/java-sdk.git</url>        </scm>        <build>            <plugins>                <plugin>                    <groupId>org.apache.maven.plugins</groupId>                    <artifactId>maven-compiler-plugin</artifactId>                    <version>3.1</version>                    <configuration>                        <source>1.6</source>                        <target>1.6</target>                        <encoding>utf-8</encoding>                    </configuration>                </plugin>            <plugin>                    <groupId>org.apache.maven.plugins</groupId>                    <artifactId>maven-gpg-plugin</artifactId>                    <executions>                            <execution>                                    <id>sign-artifacts</id>                                    <phase>verify</phase>                                    <goals>                                        <goal>sign</goal>                                    </goals>                            </execution>                    </executions>            </plugin>            </plugins>        </build>        <properties>            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        </properties>        <denpendencies>                ...        </denpendencies>    </project>
使用GPG對java項目包進行簽名(官方說明)
    > gpg --gen-key                 // 填寫一系列資訊後產生一對公密鑰,這期間需要手動輸入一個passphrase密碼,後面簽名時會用到    > gpg --list-keys               // 列出產生的key資訊    /home/coaku/.gnupg/pubring.gpg    ------------------------------    pub   2048R/11FCA5B2 2013-07-10    uid                  Qiniu Resource Storage <qbox.team@gmail.com>    sub   2048R/DAE43050 2013-07-10    > gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 11FCA5B2    // 將公開金鑰上傳到一台公開金鑰伺服器供別人下載    其他人可以通過如下方式擷取公開金鑰:    > gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 11FCA5B2
使用mvn(Maven)進行打包上傳

maven上的發布分為兩種發布版本,一種是SNAPSHOT版本,一種是正式RELEASE版本,這兩種發布過程不一樣,但都要求pom.xml配置中項目的版本號碼後面要帶有"-SNAPSHOT"格式,只是在正式RELEASE時候,maven會自動將"-SNAPSHOT"尾碼去掉。

上傳SNAPSHOT版本:

    > mvn clean deploy -Dgpg.passphrase=<PASSPHRASE>      // <passphrase>即之前產生gpg公密鑰時候手動輸入的密碼,下面也是

上傳正式RELEASE版本:

    > mvn release:clean    > mvn release:prepare -Darguments=-Dgpg.passphrase=<PASSPHRASE>    > mvn release:perform -Darguments=-Dgpg.passphrase=<PASSPHRASE>
正式 Release 項目

在Sonatype的管理員將上傳的項目正式同步到Maven中央庫之前,項目會存在於一個中間狀態的倉庫中(Staging Repository),起始狀態為open,我們需要將它變為close。步驟如此.

在狀態變為close的過程中,Maven會對項目進行一系列的檢查,如果通過了檢查,狀態會順利切換到close。

切換到close後,就能夠正式release這個項目,切換方法同close一樣,點擊release按鈕即可。 如果是第一次發布,需要通知管理員啟用該倉庫和Maven中央庫的同步

回到之前發布的那個issue上,回複給管理員,說自己的倉庫已經release了,管理員在收到回複後會啟用這個倉庫和Maven中央庫的同步工作。 注意的問題

1. pom.xml中項目版本號碼一定要是"x.x.x-SNAPSHOT"格式
2. pom.xml中對scm(軟體組態管理)的配置要正確,如果是github,那麼需要以ssh認證的方式配置對github的訪問,詳情,因為mvn在上傳過程中涉及到對github的push動作。
3. 在使用mvn進行上傳之前,要確保本地的代碼和scm中的最新版本的一致。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.