工具和资料
- QQ群 - Javascript高级爬虫 - 作者自建群,欢迎加入!
- awesome-java-crawler - 作者收集的爬虫相关工具和资料
创建新项目
- Maven中央仓库是由Sonatype维护的,因此需要到他们的JIRA系统,用类似报Bug的方式创建新项目
- 首先访问Sonatype的JIRA系统,注册一个账号,地址为 https://issues.sonatype.org/s...
- 记好自己在Sonatype上的账号密码,后面需要添加到maven的settings.xml中
- 点"Create"按钮,创建一个新的Issue,默认的Issue Type就是New Project,不要改变,依次填好下面的星标部分
- 这时候Github上的项目地址、SCM地址(也就是git地址)应该已经确定了;GroupId建议直接用"com.github.用户名",否则需要验证你对域名的所有权
- 创建的Issue是需要审核的,当其状态变为Resolved状态,就可以进行项目上传了
创建GPG密钥并上传
- Maven中央仓库要求使用GPG密钥对上传的Jar包进行数字签名,因此这一步不可缺少
- 我的电脑安装了Windows版Git,里面自带gpg.exe,但是需要先把gpg.exe所在目录加入到PATH环境变量中,比如我的电脑中是D:devGitusrbin,注意和git.exe不在同一个目录。也可以参考其他人的流程使用界面工具创建。
- 打开命令行窗口,执行gpg --gen-key,按照提示输入信息,具体见下面的参考“GPG密钥的生成与使用”
- 记好私钥的密钥,后面会把它添加到Maven的settings.xml中
-
密钥生成之后把你的公钥需要上传到公钥服务器,公钥服务器之间会自动同步
- 列出你的密钥 gpg --list-secret-keys 输出中pub一行'/'后的8位HEX字符串就是密钥ID
- 上传到服务器 gpg --keyserver keyserver.ubuntu.com --send-keys <密钥ID>
- 验证上传结果 gpg --keyserver keyserver.ubuntu.com --recv-keys <密钥ID>
修改Maven的settings.xml文件
- 在<servers>标签中添加Sonatype登录信息。Maven发布jar包时需要使用。
<server>
<!-- https://issues.sonatype.org/secure/Dashboard.jspa -->
<id>ossrh</id>
<username>你的Sonatype账户</username>
<password>你的Sonatype密码</password>
</server>
- 在<profiles>标签中添加GPG的可执行文件名和私钥密码。maven-gpg-plugin插件运行时需要使用。
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg.exe</gpg.executable>
<gpg.passphrase>GPG私钥密码</gpg.passphrase>
</properties>
</profile>
修改项目的pom.xml文件
-
根据中央仓库发布要求(见参考),pom中需要提供必要的项目信息,以下元素缺一不可,否则无法发布:
- modelVersion
- groupId
- artifactId
- version
- packaging
- name
- description
- url
- licenses.license
- developers.developer
- scm.connection
- scm.url
- 需要提供源码jar包和javadoc jar包,并使用gpg签名,因此必须添加相应maven plugin
- 需要添加distributionManagement以自动上传到Sonatype
- 下面是一个完整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>com.github.rockswang</groupId>
<artifactId>java-curl</artifactId>
<version>1.2.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
<name>java-curl</name>
<description>Ultra-lightweight CURL implementation in pure java 1.6</description>
<url>https://github.com/rockswang/java-curl</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--Compiler-->
<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>
</configuration>
</plugin>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam><!-- 添加这个压制JavaDoc检查 -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- GPG mvn clean deploy -P release -Dgpg.passphrase=YourPassphase -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo,manual</distribution>
</license>
</licenses>
<developers>
<developer>
<name>Rocks Wang</name>
<email>rockswang@foxmail.com</email>
<organization>roxstudio</organization>
<url>https://github.com/rockswang</url>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/rockswang/java-curl.git</connection>
<developerConnection>scm:git:https://github.com/rockswang/java-curl.git</developerConnection>
<url>https://github.com/rockswang/java-curl</url>
<tag>1.2.0</tag>
</scm>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<name>OSS Snapshots Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<name>OSS Staging Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
构建和上传
- 在项目根目录命令行运行 mvn clean deploy verify
- 若代码正确,配置正常,到这一步构建完即可自动打包并上传到Sonatype的Staging仓库
- 注意:如果发布正式版本则不要在版本号上添加-SNAPSHOT,否则会被上传到Snapshot仓库
发布并同步到中央仓库
- 打开Sonatype仓库管理页面 https://oss.sonatype.org/,使用前面的Sonatype账户密码登录
- 点击左面菜单中的Staging Repositories,在右面的列表中拉到最下面,就能找到自己刚上传的项目,选中它,点击Close
- 注意点击Close之后,服务器会按照“中央仓库发布要求”逐项验证你的包是否符合规格,大概需要1分钟左右。如果close失败了,点击下部面板的Activity子面板,查看失败原因,然后重新close。
- 成功Close之后,选中项目,点Release。发布后,项目会自动从Staging列表中删除。
- 回到Sonatype的JIRA系统中,找到你的issue,加条备注告诉工作人员你已经成功发布了,他们会帮你激活同步过程。只有首次提交需要这个步骤。
- 同步到中央仓库可能需要几个小时,过段时间再去中央仓库搜索吧。
参考
别人的流程:https://blog.csdn.net/liuhuan...
别人踩的坑:https://blog.csdn.net/h324321...
GPG密钥的生成与使用 https://www.jianshu.com/p/7f1...
中央仓库发布要求:https://central.sonatype.org/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。