gradle - Gradle:使用同级子项目作为插件

标签 gradle gradle-plugin

我有一个带有两个子对象的项目:gradle-pluginplugin-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/

相关文章:

gradle - 将项目资源添加到Gradle Custom插件

gradle - 如何在源文件中添加源代码文件作为构建依赖项和/或访问定义?

java - 找不到参数的方法 jaxws() [com.sun.xml.ws :jaxws-tools:2. 1.4]

gradle - Gradle依赖图的真实示例是什么?

android - jenkins使用2个git存储库,在其中一个中构建android apk,在另一个中运行maven测试

android - 无法建立已发布的APK

android - 在android studio中创建dependencies.gradle

带有 gradle 插件的 Netbeans 在构建运行时运行所有测试

Android IllegalAccessError 到我的类方法

android - gradlew 是做什么的