Step 1: 安裝 JDK, Maven, 建 Github 帳號等等.html
Step 2: 若是尚未,先建 GitHub 帳號.java
Step 3: 創建新的 Github 庫.git
Step 4: 爲你的GitHub帳號 新增 SSH 密鑰github
Step 5: 向GitHub推送代碼. redis
Step 6: 註冊 Sonatype Jira 帳號spring
Step 7: 爲新託管項目建一個 Jira issue.搞個簡單請求點這裏. apache
Step 8:爲你的操做系統 安裝 GNU PG. 確認以下:spring-mvc
C:\Users\Nadeem>gpg --version gpg (GnuPG) 2.1.15 libgcrypt 1.7.3 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: C:/Users/Nadeem/AppData/Roaming/gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
Step 9: 生成鍵對服務器
C:\Users\Nadeem>gpg --full -gen -key gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: keybox 'C:/Users/Nadeem/AppData/Roaming/gnupg/pubring.kbx' created Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Nadeem Mohammad Email address: coolmind182006@gmail.com Comment: You selected this USER-ID: "Nadeem Mohammad <coolmind182006@gmail.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: C:/Users/Nadeem/AppData/Roaming/gnupg/trustdb.gpg: trustdb created gpg: key 27835B3BD2A2061F marked as ultimately trusted gpg: directory 'C:/Users/Nadeem/AppData/Roaming/gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as 'C:/Users/Nadeem/AppData/Roaming/gnupg/openpgp-revocs.d\5694AA563793429557F1727835B3BD2A223A.rev' public and secret key created and signed. pub rsa2048 2016-08-29 [SC] 5694AA563793429557F1727835B3BD2A223A uid Nadeem Mohammad <coolmind182006@gmail.com> sub rsa2048 2016-08-29 [E] C:\Users\Nadeem>
Step 10: 輸入密碼.mvc
Step 1:增長髮布管理 distributed management 部分到 pom.xml.
增長髮布插件 deploy plugin.
<plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> </plugin>
這是如何增長髮布管理項的(distribution management)到 POM:
<distributionManagement> <snapshotRepository> <id>ossrh</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> <repository> <id>ossrh</id> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement>
Step 2:增長 ossrh 服務器到你的maven配置文件 ~/$M2_REPO/settings.xml.
<settings> <servers> <server> <id>ossrh</id> <username>your-jira-id</username> <password>your-jira-pwd</password> </server> </servers> </settings>
注: ID 與 settings.xml 中的 servers/server ID 要相對應, snapshot庫與 POM 文件裏的庫也要對應.
Step 3:在pom裏增長代碼管理部分SCM.
<scm> <connection>scm:git:git://github.com/dexecutor/dependent-tasks-executor.git</connection> <developerConnection>scm:git:git@github.com:yujiaao/spring-mvc-source-analysis.git</developerConnection> <url>https://github.com/dexecutor/dependent-tasks-executor</url> <tag>HEAD</tag> </scm>
Step 4: 增長 Maven release 插件.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <localCheckout>true</localCheckout> <pushChanges>false</pushChanges> <mavenExecutorId>forked-path</mavenExecutorId> <arguments>-Dgpg.passphrase=${gpg.passphrase}</arguments> </configuration> <dependencies> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-gitexe</artifactId> <version>1.9.5</version> </dependency> </dependencies> </plugin>
把 GPG 密碼放到Maven settings.xml對應的profile裏.
<settings> <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.passphrase>[your_gpg_passphrase]</gpg.passphrase> </properties> </profile> </profiles> </settings>
增長 Nexus staging Maven 插件.
<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://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin>
Step 5: 增長源碼和 javadoc 插件.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.10.4</version> <configuration> <encoding>UTF-8</encoding> </configuration> <execuations> <execution> <id>attach-javadoc</id> <goals> </execution> </executions> </plugin>
Step 6: 配置發佈版本的項目簽名.
<profiles> <!-- GPG Signature on release --> <profile> <id>release-sign-artifacts</id> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <build> <plugins> <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> </profile> </profiles>
Step 7: 發佈 GPG 密鑰對到 GPG 服務器:
gpg –keyserver [KEY_SERVER] –send-key [KEY_ID] The KEY_ID in the above case is 5694AA563793429557F1727835B3BD2A223A. Some of the key servers are: pool.sks-keyservers.net gnupg.net:11371 keys.pgp.net surfnet.nl mit.edu
Step 8: 發佈正式版本!
mvn clean mvn release:prepare mvn release:perform
Step 9: 推送標籤 tag 和代碼到遠程庫.
git push–tags git push origin master
Step 10: 驗證sonatype庫.
Step 11: 更新 Sonatype 的 Jira 問題項(ticket).
詳細配置可查看這個pom.xml文件例子。
Step 1: 取消本次發佈:
git reset –hard HEAD~1 (You may have to do it a second time, depending upon when the error occurred.) git reset –hard HEAD~1
Step 2: 刪除標籤tag.
git tag -d tagName git push origin :refs/tags/tagName