如何发布常规 non-Android Java 库,以便通过 Maven 和 Gradle 构建脚本将其包含在 Java 项目中?

How to publish a regular, non-Android Java library so that it becomes available for inclusion in Java projects via Maven & Gradle build scripts?

我最近为 Java 编写了一个第 3 方库。目前,我正在通过 Github 和我拥有的网站分发该库,我可以在该网站上下载 JAR 文件。我想这样做,以便开发人员可以使用 Gradle 和 Maven(可能还有其他构建自动化工具)轻松地将我的第 3 方库包含在他们的项目中。

我是 Maven、Gradle、Bintray、JCenter、MavenCentral、Ivy 等的新手。但是,我确实有使用 Ant、Java 和 Linux 的经验。

我一直在尝试学习如何使用上面的 tools/platforms 发布我的第 3 方库,但我变得很困惑。

基本上,任何人都可以告诉我上述所有技术是怎么回事吗?不要觉得有义务回答 post 中所有以问号结尾的句子。这些问题主要是为了展示我目前的理解水平。简单概述一下这些技术如何协同工作会很棒,如果可能的话,回答这个 post.

标题中的问题

真的很难(几乎不可能)给出答案,因为你问了多个问题(我数了 5 个问号),而且你想要解释所有提到的技术如何一起(或不一起) ).这确实超出了 stackexchange 的范围和用处。

但是,如果它是您可以接受的专家,那么您可能想要的是:

1) 将您的工件部署到 Maven 中央仓库 ==> 请参阅 https://maven.apache.org/guides/mini/guide-central-repository-upload.html

2) 部署到其他一些众所周知的 public maven 仓库(如 sonatype)

3) 托管您自己的 public maven 存储库(可供其他人使用)并上传到那里,仍然通过网络和 github 页面保持 "advertising"

我会尝试回答所有以问号结尾的句子:)

Based on what I've read, Gradle, Maven, and Ant are competing technologies. So, why then, in the context of actual use-case scenarios, does Gradle seem to be so intertwined with Maven?

除了作为构建工具和依赖管理器(Maven 与 Gradle 竞争)之外,Maven 还引入了标准工件描述符(POM 文件)、标准项目布局(src/main/java 等) 和一个标准的工件布局 (groupId/version/artifactId-version.ext),由于 Maven 的流行,它成为了行业中事实上的标准。它们并不是特别糟糕,所以它们暂时保留下来并且 Gradle 也可以与它们一起使用。

此外,Gradle 在 Maven 已经非常流行的时候出现了。要赶上这样一个流行的技术Gradle 必须提供一个干净和容易的迁移路径,这意味着支持 Maven 结构的项目、Maven 结构的本地缓存等。

Bintray advertises itself as a software publishing and distribution platform. So, why was there a need to create JCenter as something distinct from the rest of Bintray? What can JCenter do that Bintray can't?

JCenter is not "something distinct" from Bintray. JCenter is a repository inside Bintray. This repository is special (we call this type of repository a "Central Repository"),因为它是由 Bintray 团队自己维护的,并且包括(或 link)世界上最大的 Java 库集合。对于很多 Java(或 Android)开发人员来说,他们不打算通过 Bintray 发布他们的作品,也不关心其他人的个人存储库,Bintray 上唯一感兴趣的是是JCenter。因此,人们将 JCenter 视为独立的东西。

I've created a test package and version on Bintray and I uploaded a JAR file to the version. Is it possible to write a Gradle script that will be able to include that JAR file as a dependency in a Java project?

当然可以。 "Set Me Up" 按钮会打开一个 window,您可以在其中找到有关如何在 Gradle 中添加个人存储库的说明。完成后,您存储库中的工件将可用于在您的 Gradle 项目中进行解析。

Or does the package need to be "linked" with JCenter?

将您的包包含在 JCenter 中的好处是,其他熟悉 JCenter 作为第 3 方依赖项来源但不熟悉您在 Bintray 上的存储库的开发人员将能够找到并使用您的库。

希望对您有所帮助。


我和 JFrog, the company behind Bintray and [artifactory], see my profile 一起了解详情和 links.