在操作這篇文章之前你需要做一些賬號註冊和提交申請前置操作, 前置操作我已經寫了另一篇博客, 請移步 鏈接在此。
這篇接着講如何使用gpg和和配置發佈信息。 因爲內容有點多, 所以最重要的打包和發佈環節在第三篇博客中講解,敬請期待。
各位讀者,能否給我這個小博主一個關注點贊,謝謝。
整個教程分三篇博客講解
- 第一篇: 註冊賬號和提交申請
- 第二篇: 安裝gpg和配置pom.xml文件
- 第三篇:打包上傳發布(敬請期待)
目錄
申請賬號
提交申請
GPG簽名使用
發佈jar包需要使用gpg對你發佈的包進行簽名。 這段主要講如何安裝使用gpg。
GnuPG,簡稱 GPG,來自 http://www.gnupg.org,是 GPG 標準的一個免費實現。不管是 Linux 還是 Windows 平臺,都可以使用。GPGneng 可以爲文件生成簽名、管理密匙以及驗證簽名。
下載安裝 GPG
訪問 http://www.gnupg.org/download,下載適合自己操作系統平臺的安裝程序。
mac系統推薦使用brew下載安裝。
window系統可以下載gpg4win-2.3.3.exe。下載下來後正常安裝即可。
生成祕鑰
安裝完成後, 桌面上會出現如圖所示的圖標,點開它。
如果是首次點開,圖中紅框部分會出現兩個選項. 分別是生成新祕鑰和導入祕鑰。 我們選擇新建祕鑰
輸入姓名和電子郵件,名稱和郵件的組合不要和別人重複, 點擊下一步。
會出現讓你輸入密碼, 這個密碼你可以自己設置, 設置好後要記住,後面會用到。 點擊OK
出現下一步的三個選項, 我們先完成最重要的將公鑰上傳到
公共目錄服務器
出現圖中彈窗,表示上傳成功了。 成功後的頁面如下
圖中就是顯示的你生成的證書信息
項目的pom文件的配置
接下來我會分段講解pom文件中的各個部分注意事項。並會在最後貼出完整的pom文件
基本信息
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.xiezc</groupId>
<artifactId>yao</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<name>yao</name>
<description>一個依賴注入的框架, 整合netty 提供類似springMvc的能力。 整合mybatis提供類似mybatis-spring的能力。</description>
<url>https://github.com/blanexie/Yao</url>
其中需要注意的是url填寫你的項目github地址。 description簡單描述下你的項目。
licenses 證書信息
<licenses>
<license>
<name>Mulan Permissive Software License,Version 1</name>
<url>https://license.coscl.org.cn/MulanPSL/</url>
</license>
</licenses>
這裏需要貼出你的開源證書的名稱和證書的url。 我使用是木蘭寬鬆許可。 所以貼出的是上面的地址,
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
Apache 協議 2.0
其他協議類似
scm軟件配置管理插件
<scm>
<connection>scm:git:https://github.com/blanexie/Yao.git</connection>
<developerConnection>scm:git:https://github.com/blanexie/Yao.git</developerConnection>
<url>git:https://github.com/blanexie/Yao.git</url>
</scm>
這裏配置你的github的信息。 參考我的配置就行
scm 具體有何作用我也搞不懂, 希望知道的讀者能在評論中告知我,謝謝。
配置開發者信息
<developers>
<developer>
<name>blanexie</name>
<email>[email protected]</email>
</developer>
</developers>
這裏就是配置開發者信息了, 如果有多個開發者,可以添加多個developer
節點。
distributionManagement配置倉庫信息
<distributionManagement>
<snapshotRepository>
<id>snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>release</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
這裏就是配置上你之前的在發佈申請的管理員會在評論中告知你的兩個地址。這裏需要注意兩個地址不要弄混了。 同時需要記住你配置的兩個id, 後面會使用到這兩個id。
build打包配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>${java.version}</target>
<source>${java.version}</source>
<encoding>${java.encoding}</encoding>
</configuration>
</plugin>
<!-- Javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>${java.encoding}</encoding>
<charset>${java.encoding}</charset>
<docencoding>${java.encoding}</docencoding>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalJOption>-Xdoclint:none</additionalJOption>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-source-plugin
插件必須配置,這個插件是將你的源碼一起打包, maven倉庫必須需要源碼。 所以這個不能少。 具體可以參考我配置maven-javadoc-plugin
插件必須, 這是安裝你的代碼中方法的註釋生成javadoc文檔的插件, 也是maven倉庫必須的插件, 注意配置這個插件additionalJOption的值爲true。 additionalJOption是告知maven忽略不規範的java註釋。maven-compiler-plugin
這個插件是配置編譯的jdk版本信息等
profiles多環境配置
<profiles>
<profile>
<id>release</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>snapshot</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
<execution>
<id>release</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Gpg Signature -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>release</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>release</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
這中間也配置了build.。其中build中的插件有
maven-gpg-plugin
簽名插件,這個插件會調用你本地電腦的gpg程序來簽名代碼。 到時候簽名會有很多問題。後面部分會詳細說明簽名的問題。 這個也是maven倉庫必須的插件。參考我的配置即可nexus-staging-maven-plugin
這是幫助我們上傳jar包到倉庫的插件, 按照我的配置即可maven-source-plugin
這個也是打包源碼的插件,爲何這裏也有一個我也不知道。 希望知道的讀者在評論告知。謝謝。
爲何要這裏定義一個release的profiles環境呢。 這個環境中
maven-gpg-plugin
和nexus-staging-maven-plugin
插件都是隻有發佈包到maven倉庫中才需要的,但是我們平時開發中, 並不是每次都是上傳到公共倉庫的,所以可以把上傳需要的配置提取出來單獨放在profile中是很好的處理方法, 平時就使用其他環境來打包。
上面已經分開把pom文件中需要注意的事項全部講解完成了,下面會貼出完成版本。
完整pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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>xyz.xiezc</groupId>
<artifactId>yao</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<name>yao</name>
<description>一個依賴注入的框架, 整合netty 提供類似springMvc的能力。 整合mybatis提供類似mybatis-spring的能力。</description>
<url>https://github.com/blanexie/Yao</url>
<properties>
<app.name>yao</app.name>
<maven.test.failure.ignore>false</maven.test.failure.ignore>
<maven.test.skip>false</maven.test.skip>
<java.version>11</java.version>
<java.encoding>UTF-8</java.encoding>
<project.build.sourceEncoding>${java.encoding}</project.build.sourceEncoding>
<maven.build.timestamp.format>yyyy-MM-dd_HH_mm</maven.build.timestamp.format>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven.compiler.compilerVersion>${java.version}</maven.compiler.compilerVersion>
</properties>
<modules>
<module>xioc</module>
<module>example</module>
<module>xweb</module>
<module>xorm</module>
</modules>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xyz.xiezc</groupId>
<artifactId>xweb</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>xyz.xiezc</groupId>
<artifactId>xioc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>xyz.xiezc</groupId>
<artifactId>xorm</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>8.0.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.49.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>${java.version}</target>
<source>${java.version}</source>
<encoding>${java.encoding}</encoding>
</configuration>
</plugin>
<!-- Javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>${java.encoding}</encoding>
<charset>${java.encoding}</charset>
<docencoding>${java.encoding}</docencoding>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalJOption>-Xdoclint:none</additionalJOption>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<licenses>
<license>
<name>Mulan Permissive Software License,Version 1</name>
<url>https://license.coscl.org.cn/MulanPSL/</url>
</license>
</licenses>
<scm>
<connection>scm:git:https://github.com/blanexie/Yao.git</connection>
<developerConnection>scm:git:https://github.com/blanexie/Yao.git</developerConnection>
<url>git:https://github.com/blanexie/Yao.git</url>
</scm>
<developers>
<developer>
<name>blanexie</name>
<email>[email protected]</email>
</developer>
</developers>
<distributionManagement>
<snapshotRepository>
<id>snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>release</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>release</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>snapshot</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
<execution>
<id>release</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Gpg Signature -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>release</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>release</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
maven的setting.xml文件配置
我使用的setting.xml配置文件在我用戶目錄的
.m2
目錄下。注意要改到正確的maven使用的setting.xml文件纔有效
<servers>
<server>
<id>snapshot</id>
<username>xiezc</username>
<password>***********(馬賽克)</password>
</server>
<server>
<id>release</id>
<username>xiezc</username>
<password>***********(馬賽克)</password>
</server>
</servers>
在你的setting.xml文件中增加兩個server節點。其中id節點就是你上面的pom文件的distributionManagement 節點的兩個倉庫的id。 注意這兩個id一定要上面的pom文件中distributionManagement 節點配置的id一樣
這兩個節點的username就是你之前註冊的賬號的用戶名, 密碼是要你之前記住的註冊時候的密碼,如果忘記可以通過註冊郵箱找回。 上一篇博客中我已經強調了要記住註冊密碼的。
maven打包項目
走完上面的流程,基本的前置工作已經完成了,下面就是激動人心的打包項目環節了。