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 版本。如果主机上尚不存在这两个版本,则会自动下载。
发布的 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.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。
这将:
要查看将发布的内容,请执行: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 允许定义要发布的其他工件。
在以下示例中,在发布时生成了两个工件:
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 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中文网其他相关文章!