如何手动发布JAR到mavencentral?

2024-03-31

我创建了一个开源项目 https://github.com/Kshitiz-Sharma/log4j-weblayout我想将其发布到 Maven Central,以便用户只需在 pom.xml 中引用该库即可使用该库。就像这样:

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

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

例如一个教程 http://java.dzone.com/articles/deploy-maven-central建议为您的 github 帐户创建 SSH 密钥,并让 Maven 在推送到 Maven Central 时自动创建 git 标签。尽管这很有用,但没有必要开始。

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

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

Gives:

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

当您第一次做某事时,先手动完成然后自动化通常会有所帮助。

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


1)创建您的 Jira 帐户:注册 Sonatype https://issues.sonatype.org/secure/Signup!default.jspa


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

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

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


资源 :

OSSRH 指南 http://central.sonatype.org/pages/ossrh-guide.html#deployment

使用 Maven 进行部署 http://central.sonatype.org/pages/apache-maven.html

PGP 签名 http://central.sonatype.org/pages/working-with-pgp-signatures.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何手动发布JAR到mavencentral? 的相关文章

随机推荐

  • 寻找可与 Google App Engine 配合使用的 python 视频编辑/处理功能

    是否知道任何可与 Google App Engine 配合使用的 python 视频编辑 处理库或框架 我需要在我的 App Engine 网站上以语法方式编辑视频文件 添加配乐 在顶部分层视频剪辑等 由于大多数视频 音频编解码器都是用 C
  • pip install - PermissionError:[Errno 13]权限被拒绝

    环境 视窗8 1 Python 3 5 Anaconda Issue 当我做pip install sklearn upgrade 我收到以下错误 Exception Traceback most recent call last File
  • 链接到 OSX 上的 iOS 模拟器二进制文件

    我很好奇如果我链接到 Mac 应用程序中的 iOS 模拟器框架会发生什么 因此 我将 UIKit 复制到它自己的文件夹中 因此框架搜索路径不会包含所有 iOS 模拟器框架 就像 CoreFoundation 在 Mac 和 iOS 上都存在
  • 无法在 Codeigniter 中取消链接文件

    在我的项目中我有一个文件夹secure在根中 项目包如下所示 application secure system 在安全文件夹内 我正在使用表单提交上传一些图像 config1 upload path secure ext end expl
  • Qt Widget 应用程序“库未注册”错误

    我最近刚刚开始使用 Qt 并创建了一个简单的 Qt Widgets 应用程序 当我构建并运行应用程序时 即使我创建了一个没有新代码的新项目 我收到以下错误消息 mincore com oleaut32 dispatch ups cpp 21
  • 如何在 Windows 中从 PHP 函数 exec() 获取 PID?

    我一直用 pid exec usr local bin php file php args gt dev null echo 但我正在使用 XP 虚拟机开发 Web 应用程序 我不知道如何在 Windows 中获取 pid 我在cmd上尝试
  • 使用 Freebase MQL 读取 google api 的非唯一查询

    看来我只能使用新的 freebase MQL 读取 api 执行唯一查询 即在查询中包含实体 id 以下是对 id 和 type 的搜索 https www googleapis com freebase v1 mqlread query
  • Python在函数调用之外获取变量名[重复]

    这个问题在这里已经有答案了 让我们有下面的代码 def f a b c import inspect stack inspect stack How to know the original variable names i e arg1
  • 按 Pandas DataFrame 中的连续索引分组

    我正在使用 python 编写传感器数据分析代码 我根据某些条件从 DataFrame 示例中的陀螺仪数据 中获取行 import pandas as pd gyro pd read csv gyroOutput csv above gyr
  • 可以在 PHP 的类中使用静态常量吗?

    我预计以下内容会起作用 但似乎没有
  • 将可点击的 SVG 图像插入 Sphinx 文档

    我有 SVG 图像文件 其中有多个节点 每个节点都与 URL 关联 如果我直接在浏览器中打开此文件 我可以单击每个节点 它将打开不同的 URL 但是 当我在 Sphinx 文档中使用这张图片时 它不起作用 图片作为一个整体呈现 所以我需要通
  • Android CookieManager setCookie 创建多个cookie

    在我的 Android 应用程序中 我有一个网络视图 它从多个域加载 URL 我需要删除特定域中的所有 cookie 我想保留来自其他域的 cookie 但我需要删除一个域中的所有 cookie 我对处理我的请求的所有其他解决方案持开放态度
  • IT公司项目选择时如何决策? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 他们选择项目的标准是什么 他们选择项目的依据是什么 如果他们想继续经营下去 就需要投资回报
  • Groovy 中的单元测试抽象类

    我是单元测试和模拟的新手 我正在尝试对 Grails 中的抽象域类进行单元测试 我应该如何模拟实现 以便可以对域类的约束进行单元测试 有没有办法使用 groovy 或 grails 附带的模拟库 我应该只实现一个简单地扩展抽象类的类吗 gr
  • 如何从 javascript 发送curl 请求?

    我想发送这个 curl https fcm googleapis com fcm send H Content Type application json H Authorization key
  • 从加载到内存的 24 位 BMP 文件中获取 HBITMAP

    我有一个 24 位 BMP 文件加载到 RAM 中 我正在尝试为此图像文件创建一个 HBITMAP 我发现了一些我一直在尝试的例子 但似乎无法发挥作用 基本上 我需要该文件的 HBITMAP 以便我可以卸载该文件并保留 HBITMAP 稍后
  • savefig - 文本被截断

    假设我创建了一个情节 import matplotlib pyplot as plt plt clf import numpy as np props np random randint 0 100 200 x np arange 1 20
  • python:具有多态性的类属性/变量继承?

    在我作为一名 python 学徒的努力中 如果我尝试使用类属性 我最近会陷入一些奇怪的 从我的角度来看 行为 我不是在抱怨 但希望能提供一些有用的评论来阐明这个问题 为了将复杂的问题简化为更简洁的问题 我会这样表述 确保类属性的行为更像继承
  • 函数“SUM 不存在”

    我正在使用 mysql 5 5 11 当我执行下面的脚本时 INSERT INTO payments created Amount user Remarks orderid paymethod VALUES 2016 09 03 0 0 a
  • 如何手动发布JAR到mavencentral?

    我创建了一个开源项目 https github com Kshitiz Sharma log4j weblayout我想将其发布到 Maven Central 以便用户只需在 pom xml 中引用该库即可使用该库 就像这样