我有一个带有两个子项目的项目: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。幸运的是,始终可以避免这一点,总是在clean之后立即运行build (可以这样说,在相同的“run”中)。这可以手动完成(gradle clean build),也可以自动完成(使用clean.finalizedBy(build))。再说一遍,这是可行的,但感觉像是黑客。
最后,我的实际问题是:是否有更好的方法来做到这一点?
请注意,gradle-plugin 是一个独立的插件,不仅被 plugin-consumer**,使用,因此** buildSrc 不幸不是一个合适的解决方案。
发布于 2020-04-18 20:46:15
您可以使用Maven发布插件将插件发布到本地Maven存储库。然后像其他艺术品一样简单地消费它。
假设插件项目中有类似的内容:
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 pluginhttps://stackoverflow.com/questions/61292628
复制相似问题