gpt4 book ai didi

java - 发布一个简单的 Java 库到 Maven

转载 作者:行者123 更新时间:2023-11-29 08:21:22 24 4
gpt4 key购买 nike

我可能在这里遗漏了一些重要的东西。但是,我正在努力将一个简单的库发布到 maven 存储库(它将被组织中其他基于 maven 的项目使用)

我在 Gradle 官方网站上找到了最好的指南:https://docs.gradle.org/current/userguide/publishing_maven.html

但是,还有很多问题没有解答:

  • 除了手动包含 if-else 语句之外,是否没有其他方法可以区分 SNAPSHOT 和发布版本?

  • 什么是来自components.java? IDEA 没有提供大多数此类 DSL 的自动完成或文档(与 Maven 不同,Maven 的代码智能运行良好)

  • 如何发布到需要身份验证的私有(private)存储库?我知道某处必须有一个使用的 block :

        username = "${artifactory_user}"
    password = "${artifactory_password}"

~/.gradle/gradle.properties 读取值

但是我应该把这个方 block 放在哪里呢?

总的来说,我觉得我在这里遗漏了一些东西,也许是一些被广泛阅读的文档......使用 maven 本身这个过程相当简单,官方文档使这个过程相对轻松

使用 Gradle,我觉得最简单的发布到存储库需要大量定制逻辑,而我的直觉告诉我,如此常见的东西必须已经封装在具有合理默认值的插件中

最佳答案

我看到您已经找到了解决方案,但我的回答旨在为您的问题提供详细的答案。

Is there no way to differentiate between SNAPSHOT and release builds other than to manually include the if-else statement?

正确。 if-else 语句正是您区分快照和发布构建所需要的。 Gradle 本身不提供任何类型的版本控制功能。这留给你处理或插件,如 Nebula Release .

What is from components.java

  • from 是来自 AbstractCopyTask 的方法调用哪个Jar任务类型是的子类。
  • components 又是另一个方法调用。您实际上是在调用 ProjectgetComponents() .
    • components.javacomponents.getByName("java") 的糖。这是因为 Groovy 的动态/魔法而起作用.

IDEA gives no autocomplete or documentation on most of these DSLs (unlike Maven, where the code intelligence works well)

这是由于 Groovy 的动态/弱类型。 build.gradle 文件是使用 Groovy 编写的。 IntelliJ 确实会尝试推断构建脚本的类型,但不能完全推断。幸运的是,您现在可以使用 Kotlin 编写构建脚本:

我强烈建议继续使用 Kotlin DSL。您将确切地知道所有内容的来源。

How do I publish to a private repository that requires authentication?

不幸的是,maven-publish 插件的文档只用一句话提到了它。即便如此,它只是将您引导至 API 文档,这些文档并不总是有用,但您能够弄明白。

https://docs.gradle.org/current/userguide/publishing_maven.html

You can also configure any authentication details that are required to connect to the repository. See MavenArtifactRepository for more details.

最后:

(...) the values being read from ~/.gradle/gradle.properties

Gradle 会不遗余力地解析一个属性。 gradle.properties 只是 Gradle 查找属性的众多位置之一。您可以在顶部的属性 部分下查看更多详细信息here .


我想通过使用 Kotlin DSL 提供您的答案的完整示例作为结束。同样使用 buildscript { } 是应用插件的传统方法,如前所述 here .您应该继续使用更新/首选的 plugins{} block 。更多信息 here .

plugins {
`maven-publish`
id("org.jetbrains.kotlin.jvm") version "1.3.31"
}

group = "com.company"
version = "1.0.0-SNAPSHOT"

tasks.wrapper {
gradleVersion = "5.6.1"
distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
}

val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(sourceSets.main.get().allSource)
}

repositories {
mavenCentral()
}

publishing {
publications {
register<MavenPublication>("mavenJava") {
artifactId = "some-artifactId"
from(components["java"])
artifact(sourcesJar.get())
pom {
name.set("Project Name")
}
}
}
repositories {
maven {
url = uri("https://company.jfrog.io/company/maven-local")
credentials {
username = property("artifactory_user") as String
password = property("artifactory_password") as String
}
}
}
}

val test by tasks.getting(Test::class) {
useJUnitPlatform()
}

dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
// ...
}

关于java - 发布一个简单的 Java 库到 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com