我有一个带有两个子对象的项目:gradle-plugin
和plugin-consumer
。我想将插件从gradle-plugin
应用于plugin-consumer
。我试图这样做:
// plugin-consumer/build.gradle
buildscript {
dependencies {
classpath project(':gradle-plugin')
}
}
apply plugin: 'my.plugin.id'
但是我遇到了以下错误:
A problem occurred configuring project ':plugin-consumer'.
> Cannot use project dependencies in a script classpath definition.
我认为不支持此功能,因为在配置
gradle-plugin
之前需要完全构建plugin-consumer
。幸运的是,我可以使用
fileTree
依赖项来实现我的目标:// plugin-consumer/build.gradle
buildscript {
dependencies {
classpath fileTree(includes: ['*.jar'], dir: '../gradle-plugin/build/libs')
}
}
apply plugin: 'my.plugin.id'
这行得通,但感觉像是一大堆黑客,并导致“引导问题”。
例如,我不能
clean
gradle-plugin
,因为(删除的)jar文件对于配置plugin-consumer
是必需的,必须完成(重新)构建gradle-plugin
。幸运的是,可以通过总是在
build
之后立即运行clean
(可以说是在同一“运行”中)来避免这种情况。这可以手动完成(gradle clean build
)或自动完成(使用clean.finalizedBy(build)
)。同样,这可行,但感觉像是黑客。最后,我的实际问题是:有更好的方法吗?
请注意,
gradle-plugin
是一个独立的插件,不仅由plugin-consumer
使用,因此,不幸的是,这里buildSrc
不是合适的解决方案。
最佳答案
您可以使用Maven Publish插件将插件发布到本地Maven存储库。然后像其他 Artifact 一样简单地消耗它。
假设您的插件项目中有类似的东西:
plugins {
`maven-publish`
`java-gradle-plugin`
}
只需在本地发布:
./gradlew :my-plugin-project:publishToMavenLocal
然后在您的消耗项目中,如下所示:
buildscript {
repositories {
mavenLocal()
}
dependencies {
"classpath"("com.example:my-plugin-gav:1.0.0-SNAPSHOT")
}
}
// apply plugin
关于gradle - Gradle:使用同级子项目作为插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61292628/