【问题标题】:How to manually publish JAR to maven central?如何手动将 JAR 发布到 Maven 中心?
【发布时间】:2015-05-04 23:44:58
【问题描述】:

我创建了一个open source project,我想将它发布到 maven Central,这样用户就可以通过简单地在他们的 pom.xml 中引用它来使用该库。像这样:

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

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

例如one tutorial 建议为您的 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' 是 不是工作副本

当您第一次做某事时,通常先手动完成,然后再自动化。

将 JAR 放入 Maven 中心的最基本、最简单的方法是什么?

【问题讨论】:

    标签: java maven


    【解决方案1】:

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

    当发布到 maven Central 时,您需要使用一个组 ID 来识别您上传的所有工件。像in.ksharma 这样的东西。您还需要对工件进行签名,以便用户能够验证它们实际上来自您。

    所以首先转到 sonatype jira 和 create an account,然后创建一个 jira 问题以使您的组 id 获得批准。类似this

    现在生成一个gpg keypair 来为您的工件签名:

    $ 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 would complain:

    [ERROR] 未能执行目标 org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare 项目 log4j-weblayout 上的 (default-cli):您没有 SNAPSHOT 反应堆项目列表中的项目。 -> [帮助 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 中:

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

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

    然后转到staging repositories部分,选择您的存储库并单击发布(更多帮助here)。评论一下你已经发布了神器的jira问题,等待一段时间。

    现在您的用户可以搜索和使用来自central repository 的工件:

    【讨论】:

    • github.com/sonatype/oss-parents 说 org.sonatype.oss 已弃用。也许需要更新?无论如何,感谢您提供详细的质量检查!
    • 已弃用,请参阅我的回答。
    【解决方案2】:

    1) 创建您的 Jira 帐户:Signup Sonatype


    2) 创建一个新的项目票证(以声明您的工作区):Create new project ticket


    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 票证

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

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


    资源:

    OSSRH Guide

    Deploy with Maven

    PGP Signatures

    【讨论】:

    • 我按照这些步骤操作,我可以在处于打开状态的临时存储库中获取我的存储库,但我仍然无法在公共 maven 存储库中看到我的项目。那么我们是否需要做任何其他步骤才能使该项目可用于公共 maven 中心?
    • 是的,面对同样的事情,有什么解决方案吗? @VinitSolanki
    • 那么您需要提升暂存存储库,以便自动公开使用。
    • 第 4 步我有一些问题,我使用这个:gpg2 --keyserver http://keyserver.ubuntu.com --send-keys xxxx
    猜你喜欢
    • 2016-02-29
    • 2015-02-24
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多