maven
当我向Maven Central发布Java开源库jcabi-aspects的新版本时,我花费了30秒钟的时间。 甚至更少。 最近,我发布了0.17.2版本。 您可以在Github第80期中看到所有情况:
如您所见,我向Rultor发出了命令,它向Maven Central发布了一个新版本。 我什么也没做。现在,让我们看看如何做到这一点。 如何配置项目,以便将新版本发布到Maven Central只需花费几秒钟的时间。
顺便说一句,我假设您正在Github中托管项目。 如果没有,整个教程将无法正常工作。 如果您仍不在Github中,我强烈建议您搬到那里。
准备您的POM
确保pom.xml
包含Sonatype所需的所有元素,如Central Sync Requirements中所述。 我们将部署到Sonatype,他们会将所有JAR(不仅是)工件同步到Maven Central。
用Sonatype注册项目
在Sonatype JIRA中创建一个帐户并提出票证,要求批准您的groupId。 《 OSSRH指南》更详细地说明了此步骤。
创建和分发GPG密钥
创建GPG密钥并分发它,如本使用PGP签名文章中所述。
完成此步骤后,您应该有两个文件: pubring.gpg
和secring.gpg
。
创建settings.xml
在上一步中创建的两个.gpg
文件旁边创建settings.xml
:
<settings>
<profiles>
<profile>
<id>foo</id> <!-- give it the name of your project -->
<properties>
<gpg.homedir>/home/r</gpg.homedir>
<gpg.keyname>9A105525</gpg.keyname>
<gpg.passphrase>my-secret</gpg.passphrase>
</properties>
</profile>
</profiles>
<servers>
<server>
<id>sonatype</id>
<username><!-- Sonatype JIRA user name --></username>
<password><!-- Sonatype JIRA pwd --></password>
</server>
</servers>
</settings>
在此示例中, 9A105525
是您的公共密钥的ID,而my-secret
是您在生成密钥时使用的密码。
加密安全资产
现在,使用Rultor公钥( 9AF0FA4C
)加密这三个文件:
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 9AF0FA4C
gpg --trust-model always -a -e -r 9AF0FA4C pubring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C secring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C settings.xml
您将获得三个新文件: pubring.gpg.asc
, secring.gpg.asc
和settings.xml.asc
。 将它们添加到项目的根目录,然后提交并推送。 这些文件包含您的机密信息,但是只有Rultor服务器可以解密它们。
添加Sonatype存储库
我建议使用jcabi-parent作为您项目的父pom。 这将使许多其他步骤变得不必要。 如果您使用的是jcabi-parent,请跳过此步骤。
但是,如果您不使用jcabi-parent,则应将这两个存储库添加到pom.xml
:
<project>
[...]
<distributionManagement>
<repository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
配置GPG插件
同样,我建议使用http://parent.jcabi.com,它会自动配置此插件。 如果您正在使用它,请跳过此步骤。
否则,将此插件添加到您的pom.xml
:
<project>
[..]
<build>
[..]
<plugins>
[..]
<plugin>
<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>
</project>
配置版本插件
再一次,我建议使用http://parent.jcabi.com。 它可立即配置所有必需的插件。 如果您正在使用它,请跳过此步骤。
否则,将此插件添加到您的pom.xml
:
<project>
[..]
<build>
[..]
<plugins>
[..]
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置Sonatype插件
是的,您是对的,http://parent.jcabi.com也会在这里为您提供帮助。 如果您正在使用它,也请跳过此步骤。
否则,将这四个插件添加到您的pom.xml
:
<project>
[..]
<build>
[..]
<plugins>
[..]
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>package-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>package-javadoc</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6</version>
<extensions>true</extensions>
<configuration>
<serverId>oss.sonatype.org</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<description>${project.version}</description>
</configuration>
<executions>
<execution>
<id>deploy-to-sonatype</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
<goal>release</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
创建Rultor配置
在项目的根目录中创建一个.rultor.yml
文件(参考页详细介绍了此格式):
decrypt:
settings.xml: "repo/settings.xml.asc"
pubring.gpg: "repo/pubring.gpg.asc"
secring.gpg: "repo/secring.gpg.asc"
release:
script: |
mvn versions:set "-DnewVersion=${tag}"
git commit -am "${tag}"
mvn clean deploy --settings /home/r/settings.xml
您可以将文件与jcabi-aspects的实时Rultor配置进行比较。
运行!
现在是时候看看它们如何工作了。 在Github问题跟踪器中创建一个新票证,并将类似的内容发布到其中(阅读有关Rultor命令的更多信息):@rultor release, tag is `0.1`
您将在几秒钟内收到答复。 其余的将由Rultor完成。
请享用!
顺便说一句,如果某些东西如我所解释的那样无效,请毫不犹豫地向Rultor问题跟踪器提交票证。 我会尽力帮助您。
是的,忘记了,Rultor还在做两件重要的事情。 首先,它会创建带有适当说明的Github版本。 其次,它发布有关发布的推文,您可以转发,以向关注者发布公告。 这两个功能对我来说都很方便。 例如:
DynamoDB Local Maven插件,0.7.1已发布https://t.co/C3KULouuKS
— rultor.com(@rultors) 2014年8月19日
相关文章
您可能还会发现以下有趣的帖子:
翻译自: https://www.javacodegeeks.com/2014/09/how-to-release-to-maven-central-in-one-click.html
maven