首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle:使用兄弟子项目作为插件

Gradle:使用兄弟子项目作为插件
EN

Stack Overflow用户
提问于 2020-04-18 16:35:37
回答 1查看 161关注 0票数 1

我有一个带有两个子项目的项目:gradle-pluginplugin-consumer。我想把gradle-plugin的插件应用到plugin-consumer上。我试过这样做:

代码语言:javascript
复制
// plugin-consumer/build.gradle

buildscript {
    dependencies {
        classpath project(':gradle-plugin')
    }
}

apply plugin: 'my.plugin.id'

但我受到了以下错误的欢迎:

代码语言:javascript
复制
A problem occurred configuring project ':plugin-consumer'.
> Cannot use project dependencies in a script classpath definition.

我认为这是不受支持的,因为在配置gradle-plugin之前,它需要完全构建plugin-consumer

幸运的是,我可以使用fileTree依赖来完成我的目标:

代码语言:javascript
复制
// 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 不幸不是一个合适的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2020-04-18 20:46:15

您可以使用Maven发布插件将插件发布到本地Maven存储库。然后像其他艺术品一样简单地消费它。

假设插件项目中有类似的内容:

代码语言:javascript
复制
plugins {
    `maven-publish`
    `java-gradle-plugin`
}

只需在本地发布:

代码语言:javascript
复制
./gradlew :my-plugin-project:publishToMavenLocal

然后在您的消费项目中,如下所示:

代码语言:javascript
复制
buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        "classpath"("com.example:my-plugin-gav:1.0.0-SNAPSHOT")
    }
}

// apply plugin
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61292628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档