向Maven倉庫發(fā)布組件

一般间坐,我們?nèi)绻_發(fā)了一個工具組件灾挨,肯定想將它發(fā)布以供其他人使用。在公司內(nèi)部竹宋,我們可以將其發(fā)布到私有倉庫劳澄,在互聯(lián)網(wǎng)環(huán)境,我們一般將其發(fā)布到 maven 中央倉庫蜈七。以下以我們最近開發(fā)的java工具 flyRafter 進行介紹秒拔,如何將一個組件發(fā)布到 maven 中央倉庫。

首先飒硅,我們先要確保組件能正確編譯為 jar 包砂缩,在這個前提下,我們先提前配置我們項目的 pom.xml 三娩,以便發(fā)布時使用庵芭。

  1. 項目基本信息配置
    <groupId>fun.mortnon</groupId>
    <artifactId>flyrafter</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>

    <name>${project.artifactId}</name>
    <url>https://gitee.com/mortise-and-tenon/flyrafter</url>
    <description>generate sql file from java entity class.</description>

這里配置項目的最重要的 groupIdartifactId尽棕、name等。

需要注意彬伦,按照中央庫的要求滔悉,如果向 maven 中央庫提交組件,你需要擁有 groupId 使用的域名单绑,如果你沒有域名回官,你也可以使用托管環(huán)境的域名作為 groupId。比如你項目在 github上搂橙,你的用戶名叫 ME歉提,你的 groupId 可以是 com.github.me

  1. 組件的開源協(xié)議
<licenses>
        <license>
            <name>MIT License</name>
            <url>https://opensource.org/licenses/MIT</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

你用什么協(xié)議区转,就配置相應(yīng)協(xié)議即可苔巨。

  1. 項目的源碼地址及所屬開發(fā)者信息
    <scm>
        <url>http://mortnon.fun</url>
        <connection>scm:git:https://gitee.com/mortise-and-tenon/flyrafter.git</connection>
        <developerConnection>scm:git:https://gitee.com/mortise-and-tenon/flyrafter.git</developerConnection>
    </scm>

    <developers>
        <developer>
            <name>mortnon</name>
            <email>mortnon@outlook.com</email>
            <organization>卯榫 mortise-and-tenon</organization>
            <organizationUrl>https://mortnon.fun</organizationUrl>
        </developer>
    </developers>

在這里填寫你的項目地址、托管的SCM地址废离,以及所屬開發(fā)者的介紹信息侄泽。

  1. 發(fā)布倉庫配置
    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

這里配置的倉庫地址,是中央庫最新的地址蜻韭,新項目都將提交到這里悼尾。

注意 idossrh柿扣,這個值要與后面在本地 maven 的 setting.xml 配置的 值一致,保持與官方說明使用的 ossrh 一致最簡單闺魏。

  1. 插件配置
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.sonatype.plugins</groupId>
                        <artifactId>nexus-staging-maven-plugin</artifactId>
                        <version>1.6.7</version>
                        <extensions>true</extensions>
                        <configuration>
                            <serverId>ossrh</serverId>
                            <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                            <autoReleaseAfterClose>true</autoReleaseAfterClose>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.2.1</version>
                        <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.9.1</version>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <additionalJOptions>
                                <additionalJOption>-Xdoclint:none</additionalJOption>
                            </additionalJOptions>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.6</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>

以上插件是發(fā)布到中央庫所需要的未状,與項目本身編譯沒有直接關(guān)系。由于涉及到 source析桥、doc的編譯生成司草,如果只是本地調(diào)試,會增加編譯耗時烹骨,所以官方也建議將這些與發(fā)布相關(guān)的插件通過 profile進行區(qū)分配置翻伺,將這些發(fā)布相關(guān)插件放到發(fā)布的 profile中,如:

    <profiles>
        ...
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    ...
                </plugins>
            </build>
        </profile>
    </profiles>

以上為對項目的 pom.xml 進行配置的介紹沮焕。以下介紹對本地 maven 的 setting.xml進行配置介紹吨岭。打開本地 maven 工具的目錄,進入 conf 目錄下峦树,就可以看到 setting.xml文件辣辫。打開此文件,按如下添加內(nèi)容:

  1. profiles 節(jié)點添加內(nèi)容
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>the_pass_phrase</gpg.passphrase>
      </properties>
    </profile>

注意這里的gpg是在發(fā)布時調(diào)的命令魁巩,根據(jù)gpg的版本急灭,這里也可以是 gpg2,而 passphrase代表你的私鑰的密碼谷遂,這里可不用填寫葬馋,在發(fā)布時,一般還會彈窗要求輸入肾扰。

  1. servers 節(jié)點添加內(nèi)容
<server>
      <id>ossrh</id>
      <username>NAME</username>
      <password>PWD</password>
    </server>

注意這里的用戶名和密碼畴嘶,是中央庫 sonatype 的用戶名與密碼,后面將介紹相關(guān)的使用集晚,注冊地址為 sonatype

以上發(fā)布插件窗悯、maven setting.xml 中都涉及gpg配置,因為項目編譯后發(fā)布前要使用gpg進行簽名校驗偷拔,所以我們需要先用這個工具生成公私鑰蒋院。Linux 環(huán)境下這個工具很簡單,此處不討論莲绰,僅討論 Windows 環(huán)境下欺旧。

我們先去gpg4win 官方下載 Windows 環(huán)境的安裝包,地址:gpg4win蛤签。下載頁面上切端,會讓你選擇是否使用 paypal 捐助,沒錢選擇捐 0 元顷啼,直接下載即可踏枣。下載成功后昌屉,雙擊安裝程序,按提示不斷下一步安裝即可茵瀑。

安裝成功后间驮,打開gpg4win(名為Kleopatra,圖標頭像是一個齊留海的女頭)马昨,如果出現(xiàn)如下提示信息 “Kleopatra cannot be run as administrator without breaking file permissions in the GnuPG data folder.”竞帽。遇到這種情況,可以直接點擊另一個安裝時生成的快捷圖標 GPA 來打開gpg應(yīng)用鸿捧,然后點擊圖標中靠右的 Keyring 來打開生成界面屹篓。

kelopatra
gpa
gpa2

在GPA界面中點擊生成新的密鑰,按照提示一步步操作即可匙奴,注意記住自己的密鑰的密碼堆巧。密鑰生成成功后,右鍵點擊密鑰泼菌,然后選擇“Send Keys”谍肤,將公鑰發(fā)送給服務(wù)器。

以上所有配置哗伯、操作完成后荒揣,本地的配置基本完成。以下進入 sonatype 進行賬號注冊焊刹。

進入官網(wǎng)sonatype系任,注冊一個賬號,注意密碼要有大小寫和特殊符號虐块。注冊成功后俩滥,點擊上方的“新建”,然后新建一個問題(issue),選擇項目Community Support - Open Source Project Repository Hosting (OSSRH)非凌,問題類型選擇 New Project举农。

  • 概要輸入自己的項目名稱或者相應(yīng)的描述即可荆针。

  • Group Id輸入自己項目的Group Id敞嗡,注意上面提過的規(guī)則(要么用自己的域名,要么用托管網(wǎng)站的域名航背,官方文檔Group Id)喉悴。

  • Project URL 輸入自己的項目網(wǎng)站地址

  • SCM url 輸入項目的git下載地址

  • 其他項保持默認為空,即可

最后玖媚,點擊新建箕肃,提交問題今魔,然后等待官方回復操作指南障贸。

sonatype

官方會提示吟宦,你確認是否擁有相應(yīng)域名所有權(quán)篮洁,只要在域名的DNS解析中,添加一條txt記錄殃姓,將內(nèi)容填寫為自己的問題單url即可,如果是托管網(wǎng)站的名字蜗侈,如com.github.xxx,官方會直接檢查踏幻。

當DNS解析添加后馁害,點擊備注专肪,添加一條備注,告訴已添加dns解析即可搀愧。

官方審核后佳晶,會給出上傳組件的指導手冊抄瓦,手冊中會指導如何在pom.xml中添加配置蚕泽,也就是我們上面介紹的配置。在此仔蝌,我們就去進行發(fā)布即可,可以先回到上面的setting.xml中添加自己的 sonatype 賬號和密碼敛惊。

在本地的命令行中對項目執(zhí)行mvn發(fā)布命令 mvn clean deploy 即可在編譯成功后绰更,并將組件發(fā)布到中央庫 stage 庫中。同時儡湾,如果 artifact id 不以 -SNAPSHOT 結(jié)尾的話,mvn 的 stage 插件會自動將stage 庫的組件正式發(fā)布到公開倉庫中徐钠。

需要注意,如果 pom.xml 使用了 profile 對開發(fā)显拜、發(fā)布進行了區(qū)分,發(fā)布命令中需要帶上指定的 profile 名稱远荠,如 mvn clean deploy -Prelease,而更多的參數(shù)可以按照 mvn 命令的說明進行添加

發(fā)布后乏屯,我們可以在倉庫中搜索發(fā)布的組件,地址:Nexus Repository Manager辰晕,并且,如果組件處于 stage 庫确虱,可以在這里管理含友。官方也提示,發(fā)布后可以直接在[倉庫](Central Repository: (maven.org))中查看校辩,但要在Maven Central Repository Search查看的話窘问,需要等2小時宜咒。

sonatype

以上,就是整個組件向中央庫發(fā)布的操作過程故黑。以上示例中,我們發(fā)布了最后開發(fā)的 flyRafter 第一個預覽版混埠,這個工具是用于 java 中將 @Entity 注解的實體類自動生成建表 SQL 文件的工具诗轻,同時,它結(jié)合 flyway 使用吏颖,可以達成效果:

不用單獨寫sql定義表鞠柄,只要建好數(shù)據(jù)庫嫉柴,在實體類中定義好字段名稱和定義,就可以動態(tài)的對數(shù)據(jù)庫表進行變化,類似于 Hibernate的 ddl-auto:update瞧壮,但比它更好用匙握。

gitee地址: FlyRafter: 實體轉(zhuǎn)為SQL,并結(jié)合flyway應(yīng)用的工具 (gitee.com)圈纺,maven 地址:Maven FlyRafter該工具正在完善中,歡迎大家試用灯谣,并提交 issue蛔琅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辜窑,隨后出現(xiàn)的幾起案子寨躁,更是在濱河造成了極大的恐慌,老刑警劉巖职恳,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件话肖,死亡現(xiàn)場離奇詭異,居然都是意外死亡最筒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門辙培,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邢锯,“玉大人,你說我怎么就攤上這事丹擎⌒福” “怎么了再愈?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵翎冲,是天一觀的道長。 經(jīng)常有香客問我抗悍,道長,這世上最難降的妖魔是什么逻淌? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任疟暖,我火速辦了婚禮,結(jié)果婚禮上骨望,老公的妹妹穿的比我還像新娘欣舵。我一直安慰自己,他們只是感情好缘圈,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布糟把。 她就那樣靜靜地躺著,像睡著了一般遣疯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缠犀,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天辨液,我揣著相機與錄音,去河邊找鬼滔迈。 笑死被辑,一個胖子當著我的面吹牛赏殃,可吹牛的內(nèi)容都是我干的间涵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抗蠢,長吁一口氣:“原來是場噩夢啊……” “哼思劳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潜叛,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤威兜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椒舵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡犁钟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年涝动,在試婚紗的時候發(fā)現(xiàn)自己被綠了炬灭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧存。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔穴,死狀恐怖提前,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狈网,我是刑警寧澤笨腥,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布脖母,位于F島的核電站,受9級特大地震影響谆级,放射性物質(zhì)發(fā)生泄漏讼积。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一舆绎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧们颜,春花似錦、人聲如沸窥突。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽则拷。三九已至,卻和暖如春斥铺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晾蜘。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工眠屎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岖常。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓葫督,卻偏偏與公主長得像板惑,于是被迫代替她去往敵國和親偎快。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容