A B*_*elp 35 gradle build.gradle gradle-plugin gradle-kotlin-dsl
我对正在孵化的 Gradle 版本目录感到非常兴奋,并且一直在尝试它。I\xe2\x80\x99ve 发现我的信息可以在我的应用程序和 utility-lib 项目的脚本gradle/libs.versions.toml中访问。build.gradle.kts
但是,我无法使用该toml文件的内容buildSrc/build.gradle.kts或约定文件。
我可以构建的唯一方法是将依赖项硬编码到这些文件中,就像我在版本目录功能之前所做的那样。
\n在该buildSrc文件夹中,我创建了一个settings.gradle.kts文件并插入了 的dependencyResolutionManagement代码versionCatalogs,该代码指向与我的应用程序和 utility-lib 项目相同的文件。
根据 Gradle7文档,似乎可以与 和 模块共享版本目录\xe2\x80\xa6 I\xe2\x80\x99d如果可能的buildSrc话,希望能够推动它与 一起工作。buildSrc
这是一个简单的示例项目,我通过以下方式创建gradle init:my-version-catalog
感谢您的时间和帮助,
\n麦克风
\nBri*_*ice 45
使用 Gradle 7.3.3,这是可能的。注意版本目录自 Gradle 7.4 起为 GA
该代码片段假设 Gradle 至少为 7.4,但如果您需要该版本之前的它们,请
enableFeaturePreview("VERSION_CATALOGS")在每个settings.gradle.kts.
buildSrcbuildSrc/settings.gradle.kts
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
buildSrc/build.gradle.kts
dependencies {
implementation(libs.gradleplugin.intellij) // <- the lib reference
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用插件的版本目录
gradle/libs.versions.toml
...
[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
jetbrains-changelog = { id = "org.jetbrains.changelog", version.ref = "changelog-plugin" }
jetbrains-intellij = { id = "org.jetbrains.intellij", version.ref = "intellij-plugin" }
hierynomus-license = { id = "com.github.hierynomus.license", version.ref = "license-plugin" }
nebula-integtest = { id = "nebula.integtest", version.ref = "nebula-integtest-plugin" }
Run Code Online (Sandbox Code Playgroud)
build.gradle.kts
plugins {
id("java")
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.nebula.integtest)
alias(libs.plugins.jetbrains.intellij)
alias(libs.plugins.jetbrains.changelog)
alias(libs.plugins.hierynomus.license)
}
Run Code Online (Sandbox Code Playgroud)
注意在脚本中访问目录,请参考下面的部分,技巧是一样的。
在主项目中包括一个包含约定插件的 Gradle 项目。
build.gradle.kts
includeBuild("convention-plugins") // here it's a subfolder
Run Code Online (Sandbox Code Playgroud)
convention-plugins/settings.gradle.kts
dependencyResolutionManagement {
repositories {
gradlePluginPortal()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
rootProject.name = "convention-plugins"
Run Code Online (Sandbox Code Playgroud)
启用约定插件访问版本目录的技巧分为两部分,添加一个丑陋的实现依赖项来定位版本目录生成的类所在的位置。
Run Code Online (Sandbox Code Playgroud)libs.javaClass.superclass.protectionDomain.codeSource.location然后在约定插件中通过引用libs 扩展
Project::the。Run Code Online (Sandbox Code Playgroud)val libs = the<LibrariesForLibs>()这是由gradle/gradle#15383跟踪的。
convention-plugins/build.gradle.kts
plugins {
`kotlin-dsl`
}
dependencies {
implementation(libs.gradleplugin.kotlin.jvm)
// https://github.com/gradle/gradle/issues/15383
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
}
Run Code Online (Sandbox Code Playgroud)
在实际的约定插件中
import org.gradle.accessors.dm.LibrariesForLibs
plugins {
id("org.jetbrains.kotlin.jvm")
}
// https://github.com/gradle/gradle/issues/15383
val libs = the<LibrariesForLibs>()
dependencies {
detektPlugins(libs.bundles.kotlinStuff) // access catalog entries
}
Run Code Online (Sandbox Code Playgroud)
该类org.gradle.accessors.dm.LibrariesForLibs由 gradle 生成,位于本地 gradle 文件夹中的某个位置./gradle/<version>/dependency-accessors/<hash>/classes
请注意,尽管依赖项已正确解析alias(libs.gradleplugin.thePlugin),但较旧的 IntelliJ IDEA 目前 (2022.3) 在编辑器中报告为错误
。由KTIJ-19369跟踪,该票证表明这实际上是 Gradle Kotlin DSL gradle/gradle#22797中的一个错误,并且有人制作了一个简单的IntelliJ IDEA 插件来隐藏此错误,直到解决为止。
| 归档时间: |
|
| 查看次数: |
12262 次 |
| 最近记录: |