如何手动将JAR发布到maven central?

2022-09-01 03:46:17

我创建了一个开源项目,我想将其发布到maven central,以便用户只需在他们的pom中引用它即可使用该库。这样:

<dependency>
    <groupId>in.ksharma</groupId>
    <artifactId>log4j-weblayout</artifactId>
    <version>0.0.1-BETA</version>
</dependency>

我找到了几个在线教程,但其中一些已经过时了,有些建议自动化整个过程,从而明显地使其复杂化。

例如,一个教程建议为您的github帐户创建SSH密钥,并在推送到maven central时让maven自动创建git标签。虽然这很有用,但没有必要开始。

另一个例子,尝试直接通过maven发布它也会产生某种错误:

mvn release:clean release:prepare release:perform -B -e | tee maven-central-deploy.log

给:

svn: E155007: '/home/kshitiz/Documents/workspaces/ggts/log4j-weblayout/pom.xml' 不是工作副本

当你第一次做某事时,首先手动完成它,然后自动执行它通常会有所帮助。

将JAR放在maven central的最基本的,最简陋的方法是什么?


答案 1

1)创建您的Jira帐户:注册Sonatype


2) 创建新的项目工单(以声明工作区):创建新的项目工单


3) 生成 PGP 签名

gpg2 --gen-key
....
gpg: key YOUR_KEY_ID marked as ultimately trusted
...

4) 分发您的公钥

gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys YOUR_KEY_ID

将密钥分发到多个服务器以加快同步过程(pgp.mit.edu、keyserver.ubuntu.com 等)


5) 更新您的 ~.m2/设置.xml

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>jira_username</username>
      <password>jira_password</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg2</gpg.executable>
        <gpg.passphrase>your_key_passphrase</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
</settings>

6)更新你的项目pom.xml

<?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>

    <parent>
        <groupId>org.sonatype.oss</groupId>
        <artifactId>oss-parent</artifactId>
        <version>9</version>
    </parent>

    <groupId>xxx.xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>0.1</version>

    <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>
    <build>
        <plugins>
            <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>
            </plugin>
            <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>
            <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>
        </plugins>
    </build>
</project>

7) 奔跑的专家

Maven会询问您的密码

mvn clean deploy

8) 评论您的吉拉门票

这将触发与组 ID 的中央同步。

我已经推广了我的第一个版本。谢谢。


资源:

OSSRH 指南

使用 Maven 进行部署

PGP 签名


答案 2

此答案假定您有一个基于 maven 的项目,并且它处于可打包状态。 应该运行没有任何错误。mvn package

发布到 maven central 时,需要使用组 ID 来标识你上传的所有项目。类似 .你还需要对项目进行签名,以便用户能够验证它们是否确实来自你。in.ksharma

因此,首先转到sonatype jira并创建一个帐户,然后创建一个jira问题以使您的组ID获得批准。像这样的东西

现在生成一个 gpg 密钥对,用于对工件进行签名:

$ gpg --gen-key

在 中定义此键:~/.m2/settings.xml

<profiles>
  <profile>
    <id>sonatype-oss-release</id>
    <properties>
      <gpg.keyname>B63EFB4D</gpg.keyname>
      <gpg.passphrase>****</gpg.passphrase>
      <gpg.defaultKeyring>true</gpg.defaultKeyring>
      <gpg.useagent>true</gpg.useagent>
      <gpg.lockMode>never</gpg.lockMode>
      <gpg.homedir>/home/kshitiz/.gnupg</gpg.homedir>
    </properties>
  </profile>
</profiles>

修改项目的 pom 文件并附加到您的版本。所以成为.否则,专家会抱怨-SNAPSHOT0.0.1-BETA0.0.1-BETA-SNAPSHOT

[错误]未能在 project log4j-weblayout 上执行 goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli): 在 reactor 项目列表中没有 SNAPSHOT 项目。-> [帮助 1]

还添加:

<parent>
        <groupId>org.sonatype.oss</groupId>
        <artifactId>oss-parent</artifactId>
        <version>9</version>
</parent>

此父 pom 为您提供了一些现成的功能,例如配置 对 JAR 进行签名。maven-gpg-plugin

现在运行以生成项目和 gpg 签名。它会给你类似的东西:mvn release:clean release:prepare

log4j-weblayout-0.0.1-BETA-javadoc.jar.asc
log4j-weblayout-0.0.1-BETA-sources.jar.asc
log4j-weblayout-0.0.1-BETA.pom.asc
log4j-weblayout-0.0.1-BETA.pom
log4j-weblayout-0.0.1-BETA.jar.asc
log4j-weblayout-0.0.1-BETA-javadoc.jar
log4j-weblayout-0.0.1-BETA-sources.jar
log4j-weblayout-0.0.1-BETA.jar

现在将它们打包到一个 JAR 中:

jar -cvf bundle.jar log4j-weblayout-0.0.1-BETA*

转到Sonatype Nexus并使用您的凭据登录。转到暂存上传并上传捆绑包。

enter image description here

然后转到暂存存储库部分,选择您的存储库并单击“发布”(此处提供更多帮助)。评论您已发布工件的 jira 问题,并等待一段时间。

现在,您的用户可以从中央存储库中搜索和使用工件:enter image description here


推荐