首页 >Java >java教程 >JeKa:在 Maven Central 上发布的最简单方法

JeKa:在 Maven Central 上发布的最简单方法

Linda Hamilton
Linda Hamilton原创
2024-12-30 21:28:13774浏览

JeKa: The Simplest Way to Publish on Maven Central

JeKa 是一个注重简单性的现代 Java 构建工具。
这篇文章演示了如何以最少的配置发布到 Maven Central。

先决条件:您需要一个 OSSRH 帐户才能在 Maven Central 上发布。

使用 JeKa,您可以通过编辑 jeka.properties 文件来完全配置构建,如下所示:

jeka.version=0.11.11
jeka.java.version=17

jeka.inject.classpath=dev.jeka:nexus-plugin
@nexus=

@project.moduleId=com.github.djeang:vincer-dom
@project.gitVersioning.enable=true

# Configuration for deploying to Maven central
@maven.publication.predefinedRepo=OSSRH
@maven.publication.metadata.projectName=Vincer-Dom
@maven.publication.metadata.projectDescription=Modern Dom manipulation library for Java
@maven.publication.metadata.projectUrl=https://github.com/djeang/vincer-dom
@maven.publication.metadata.projectScmUrl=https://github.com/djeang/vincer-dom.git
@maven.publication.metadata.licenses=Apache License V2.0:https://www.apache.org/licenses/LICENSE-2.0.html
@maven.publication.metadata.developers=djeang:djeangdev@yahoo.fr

请注意,依赖项列在专用的 dependency.txt 文件中,以保持清晰的关注点分离。

要发布到 Maven Central,请执行:jeka project:pack maven:publish。

请参阅此处的具体示例。

说明

现在您知道如何做了,让我们解释一下它是如何工作的。

Jeka 和 Java 版本控制

为了更好的可移植性和可重复性,我们可以声明构建所需的 Jeka 和 Java 版本。如果主机上尚不存在这两个版本,则会自动下载。

指定模块 ID 和版本控制

发布的 moduleId 使用 @project.moduleId 属性指定。

可以使用 @project.version 属性显式指定版本。请注意,属性可以在 jeka.properties 文件中设置或作为命令行参数传递:-D@project.version=1.0.1.

相反,我们选择依靠 Git 使用以下方式推断版本:@project.gitVersioning.enable=true。如果当前提交没有标签,版本将设置为[branch]-SNAPSHOT;否则,它将是标签名称

配置发布存储库

@maven.publication.predefinedRepo=OSSRH 指示 Jeka 发布到预定义的 OSSRH 存储库。此存储库配置为当版本以 -SNAPSHOT 结尾时发布到 OSSRH 快照存储库,否则发布到发布存储库。

存储库使用以下环境变量来传递机密:

  • jeka.repos.publish.username:OSSRH 帐户用户名
  • jeka.repos.publish.password:OSSRH 账户密码
  • jeka.gpg.secret-key:Armored GPG 密钥作为字符串
  • jeka.gpg.passphrase:保护密钥的密码

jeka.gpg.secret-key 的内容可以通过执行:gpg --export-secret-key --armor my-key-name 获取。

提供出版物元数据

强制元数据使用 @maven.publication.metadata.xxx 属性设置。

请注意,@maven.publication.metadata.licenses 属性需要如下格式:[license1 name]:[license1 url],[license2 name]:[license2 url],...

自动发布发布

为了方便起见,我们使用Nexus插件,

它会自动关闭暂存存储库,无需手动干预。

jeka.inject.classpath=dev.jeka:nexus-plugin 指示 Jeka 从 Maven Central 获取插件,而 @nexus= 激活它。

执行构建

要发布,只需执行:jeka project:pack maven:publish。

这将:

  • 创建要发布的 JAR(项目:pack)。
  • 创建源代码和 Javadoc JAR。
  • 生成发布的POM文件。
  • 计算所有校验和。
  • 签署所有已发布的文件。
  • 将所有内容推送到 OSSRH 存储库。

要查看将发布的内容,请执行:jeka maven: info。

微调

Jeka 中的微调通常以编程方式实现,补充 jeka.properties 文件中的声明性配置。这种方法允许高度灵活和强大的配置,并具有静态类型的优点。

自定义传递依赖

我们可以自定义发布的POM中提到的依赖项。

在以下示例中,我们删除 com.google.guava:guava 依赖项,并强制 jfiglet 依赖项具有 RUNTIME 范围。

jeka.version=0.11.11
jeka.java.version=17

jeka.inject.classpath=dev.jeka:nexus-plugin
@nexus=

@project.moduleId=com.github.djeang:vincer-dom
@project.gitVersioning.enable=true

# Configuration for deploying to Maven central
@maven.publication.predefinedRepo=OSSRH
@maven.publication.metadata.projectName=Vincer-Dom
@maven.publication.metadata.projectDescription=Modern Dom manipulation library for Java
@maven.publication.metadata.projectUrl=https://github.com/djeang/vincer-dom
@maven.publication.metadata.projectScmUrl=https://github.com/djeang/vincer-dom.git
@maven.publication.metadata.licenses=Apache License V2.0:https://www.apache.org/licenses/LICENSE-2.0.html
@maven.publication.metadata.developers=djeang:djeangdev@yahoo.fr

添加额外的文物

API 允许定义要发布的其他工件。

在以下示例中,在发布时生成了两个工件:

  1. 包含文档的 ZIP 文件。
  2. 一个阴影的 uber JAR(一个 JAR,其中包含依赖项中的所有类,并重命名了包以避免冲突)。
class Build extends KBean {

    @Override
    void init() {
        var publication = load(MavenKBean.class).getMavenPublication();
        publication.customizeDependencies(deps -> deps
                .minus("com.google.guava:guava")
                .withTransitivity("com.github.lalyos:jfiglet", JkTransitivity.RUNTIME)
        );
    }

}

在其他存储库上发布

要发布到 Maven Central 以外的存储库,您可以设置以下属性:

class Build extends KBean {

    @Override
    void init() {
        var publication = load(MavenKBean.class).getMavenPublication();
        publication.putArtifact(JkArtifactId.of("doc", "zip"), this::genDoc);
        publication.putArtifact(JkArtifactId.of("shade", "jar"), project.packaging::createShadeJar);
    }

    private void genDoc(Path targetZipFile) {
        // generate documentation and zip it in targetZipFile
    }

}

将这些属性放在 [USER HOME]/.jeka/global.properties(而不是 jeka.properties 文件)中,以保持项目间的配置一致并避免冗余。

有关更多详细信息,请参阅文档。

与Maven的比较

以下是将项目部署到 Maven Central 的 Maven POM 配置等效项:

jeka.repos.publish=https://my.company/myrepo

# Optional properties
jeka.repos.publish.username=myUsername
jeka.repos.publish.password=myPassword
jeka.repos.publish.headers.Authorization=Bearer:: XHrU8hHKJHJ454==67g

结论

Jeka 提供了一种更简单但功能强大的方法来构建 Java 软件并将工件发布到 Maven Central 或其他存储库,与传统工具相比,配置和工作量要少得多。

访问网站、视频和示例,了解 Jeka 可以做得更好的一切。

免责声明:我是 Jeka 的作者。

以上是JeKa:在 Maven Central 上发布的最简单方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn