当前位置: 首页 > 知识库问答 >
问题:

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

司寇书
2023-03-14

我创建了一个开源项目,希望将其发布到maven central,以便用户只需在POM中引用它就可以使用该库。例如:

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

我找到了几个在线教程,但其中一些已经过时,一些建议自动化整个过程,从而公开复杂化它。

例如,一篇教程建议为github帐户创建SSH键,并让maven在推送到maven Central时自动创建一个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”不是工作副本

当你第一次做某件事时,首先手动做,然后自动做通常会有帮助。

在maven Central中放置JAR的最基本、最基本的方法是什么?

共有2个答案

戚甫
2023-03-14

这个答案假设您有一个基于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文件并将-snapshot附加到您的版本。因此0.0.1-beta变为0.0.1-beta-snapshot。否则maven会抱怨:

[错误]无法执行目标org.apache.maven.plugins:maven-release-plugin:2.4.2:在项目log4j上准备(default-cli)-weblayout:reactor projects列表中没有快照项目。->[帮助1]

还要加上:

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

这个父pom为您提供了一些现成的功能,比如配置maven-gpg-plugin来为您的JAR签名。

现在运行MVN release:clean release:prepare来生成工件和gpg签名。它会给你一些类似的东西:

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 -cvf bundle.jar log4j-weblayout-0.0.1-BETA*

转到Sonatype Nexus并使用您的凭据登录。转到staging upload并上载您的包。

然后转到staging repositories部分,选择您的存储库并单击release(此处提供更多帮助)。关于jira的问题,请评论您已经发布了该工件,并等待一段时间。

邢新
2023-03-14

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/settings.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

Maven会询问您的密码

mvn clean deploy

8)评论您的Jira票

这将触发与central的组ID同步。

我已经宣传了我的第一个版本。多谢了。

资源:

OSSRH指南

使用Maven部署

PGP签名

 类似资料:
  • 我想将jar发布到Nexus快照存储库。 如果你知道如何实现,我很想知道。 我将从詹金斯的工作中发布jar。 我想发布到快照存储库,但我无法调查/实现各种事情。 根据我的研究,似乎已经有了下面的Jenkins插件 null 卷曲时的错误信息如下所示。 谢谢你。

  • 我正在学习如何使用Java Spring框架,并开始尝试Spring集成。我试图使用Spring集成将我的应用程序连接到MQTT代理以发布和订阅消息,但我很难找到将消息手动发布到出站通道的方法。如果可能的话,我想专门使用java代码中的符号来构建它,而不是使用定义bean和其他相关配置的xml文件。 在每个示例中,我都看到手动发布消息的解决方案似乎是使用MessagingGateway接口,然后使

  • 我正在尝试使用WP REST API将数据从Handontable发布到WordPress。这就是我所尝试的: 我得到这个回应: {"code":"empty_content "," message ":"内容、标题、摘录为空。","数据":{ "状态":400}} 但是,JSON.stringify(hot.getDataAtRow(0))的输出如下所示: 我尝试了手动方式,通过这样设置数据,它

  • 问题内容: 我试图弄清楚如何将对象从表单发布到Web api服务。在我的控制器中,我定义了一个想要向其添加输入值的模型。 在我的输入字段中,我将它们绑定起来,例如: 在提交表单时,将这两个字段传递给我的服务并提交给我的WebApi 我已经通过两种方式尝试了此提交: 并且也如下,不声明参数 在webAPI中,我为帖子设置了一个方法 ReportLabel(dto)的定义如下: 我遇到的问题是,当我从

  • 本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单

  • null 当我运行./gradlew artifactoryPublish时,它将记录: 尝试从其他生成加载插件。Gradle: 带设置。分级: 导致此错误: 我希望在运行ArtiFactoryPublish时,将publishToMavenLocal创建的所有工件发布到Artifactory。如果artifactoryPublish是错误的工具,我愿意接受它的替代方法。 如何将Gradle插件发