ech*_*hen 5 java build artifactory gradle maven
我可能在这里遗漏了一些重要的东西。但是,我正在努力将一个简单的库发布到 Maven 存储库(该库将由组织中其他基于 Maven 的项目使用)
我找到的最好的指南是在 Gradle 官方网站上:https ://docs.gradle.org/current/userguide/publishing_maven.html
然而,仍有许多问题没有得到解答:
除了手动包含 if-else 语句之外,是否没有其他方法可以区分 SNAPSHOT 和发布版本?
什么是from components.java?IDEA 没有提供关于大多数 DSL 的自动完成或文档(与 Maven 不同,Maven 的代码智能效果很好)
如何发布到需要身份验证的私有存储库?我知道某处必须有一个块使用:
username = "${artifactory_user}"
password = "${artifactory_password}"
Run Code Online (Sandbox Code Playgroud)读取值~/.gradle/gradle.properties
但我该把这个块放在哪里呢?
总的来说,我觉得我在这里遗漏了一些东西,也许是一些被广泛阅读的文档...使用 Maven 本身,该过程相当简单,官方文档使该过程相对轻松
使用 Gradle,我觉得最简单的发布到存储库需要相当多的定制逻辑,因为我的直觉告诉我,如此常见的东西必须已经封装在具有合理默认值的插件中
我看到您已经找到了解决方案,但我的回答旨在为您的问题提供详细的答案。
除了手动包含 if-else 语句之外,是否没有其他方法可以区分 SNAPSHOT 和发布版本?
正确的。语句if-else正是区分快照和发布版本所需要的。Gradle 本身不提供任何类型的版本控制功能。这由您来处理或使用诸如Nebula Release之类的插件来处理。
什么是
from components.java
from是一个方法调用AbstractCopyTask,Jar任务类型是其子类。components又是另一个方法调用。您实际上正在getComponents()呼叫Project.
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 寻找房产的众多地点之一。您可以在此处顶部的“属性”部分下查看更多详细信息。
最后,我想使用 Kotlin DSL 提供一个完整的答案示例。还使用的buildscript { }是应用插件的传统方法,如此处所述。plugins { }您应该继续使用较新/首选的块。更多信息请点击这里。
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")
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |