我可能在这里遗漏了一些重要的东西。但是,我正在努力将一个简单的库发布到 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
又是另一个方法调用。您实际上是在调用Project
的getComponents()
.components.java
是components.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 编写构建脚本:
- > https://guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/
- > https://docs.gradle.org/current/userguide/kotlin_dsl.html
我强烈建议继续使用 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/