我知道您已经找到了解决方案,但我的回答旨在为您提供问题的详细答案。
除了手动包含 if-else 语句之外,没有办法区分 SNAPSHOT 和发布版本吗?
正确。 if-else 语句正是您需要区分快照和发布版本的内容。 Gradle 本身不提供任何类型的版本控制功能。这留给您处理或诸如Nebula Release之类的插件。
什么是from components.java
-
from 是来自 AbstractCopyTask 的方法调用,Jar 任务类型是其子类。
-
components 又是另一个方法调用。您实际上是在调用Project 中的getComponents()。
-
components.java 是 components.getByName("java") 的糖。这是因为Groovy 的动态/魔力而起作用。
IDEA 没有为大多数 DSL 提供自动完成功能或文档(与 Maven 不同,Maven 的代码智能运行良好)
这是由于 Groovy 的动态/弱类型。 build.gradle 文件是使用 Groovy 编写的。 IntelliJ 确实会尝试推断您的构建脚本的类型,但不能完全推断。幸运的是,您现在可以使用 Kotlin 编写构建脚本:
我强烈建议继续使用 Kotlin DSL。您将确切地知道所有内容的来源。
如何发布到需要身份验证的私有存储库?
不幸的是,maven-publish 插件的文档只在一个句子中提到了它。即便如此,它只是将您引导至 API 文档,这些文档并不总是有帮助,但您能够弄清楚。
https://docs.gradle.org/current/userguide/publishing_maven.html
您还可以配置连接到存储库所需的任何身份验证详细信息。有关详细信息,请参阅MavenArtifactRepository。
最后:
(...) 从 ~/.gradle/gradle.properties 读取的值
Gradle 将不遗余力地解析属性。 gradle.properties 只是 Gradle 将寻找属性的众多位置之一。您可以在顶部here的属性部分查看更多详细信息。
最后,我想提供一个使用 Kotlin DSL 回答的完整示例。同样使用buildscript { } 是应用插件的传统方法,如here 所述。您应该继续使用更新/首选的 plugins { } 块。更多信息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")
// ...
}