在另一个模块中使用自定义gradle插件模块

时间:2017-02-15 21:51:14

标签: java gradle plugins build gradle-plugin

我正在开发一个自定义插件,我希望能够在以后阶段部署到存储库,所以我为它创建了一个独立的模块。

在我做任何正式的TDD之前,我想手动进行某些探索性测试,所以,我已经创建了一个使用给定插件的演示模块。

到目前为止,我发现的唯一方法是将插件部署到本地存储库,然后将其导入另一个模块。但这非常繁琐,忘记部署它很容易。

我想知道是否有办法更直接地做到这一点。

2 个答案:

答案 0 :(得分:2)

我发现的最佳解决方案是将插件模块的文件夹作为buildSrc模块的一部分(用于本地脚本)包含在其源集中,如:

sourceSets {
    main {
        groovy.srcDirs += "../custom-plugin/src/main/groovy"
        resources.srcDirs += "../custom-plugin/src/main/resources"
    }
}

这将允许您使用插件,就像它在远程存储库中一样,但不必每次都部署它。下一个单元测试:)

答案 1 :(得分:1)

选项1:

如果您使用的是gradle 3.1或更高版本,则可以使用composite build feature。 像这样构建独立模块:gradle build --include-build /path/to/plugin-root

假设您从应用该插件的独立gradle项目的根目录运行此命令,这将首先构建该插件,然后构建您的独立项目并将刚构建的插件应用于该项目。

选项2:

如果您使用较旧的gradle版本(不支持复合版本),则可以将the maven plugin应用于您的插件项目。这定义了install任务,您现在可以通过在插件项目的根目录中运行gradle install来调用该任务。 此任务构建您的插件并将生成的jar放在本地缓存目录中(在Linux上,默认路径为~/.m2)。 请注意,在插件代码中进行的每次更改后,您都必须再次运行gradle install

现在,要让您的独立项目使用本地插件jar,您需要编辑构建脚本并将mavenLocal()放在buildscript.repositories下。确保mavenLocal()高于repositories块中的任何其他内容。

独立项目的buildscript块示例:

buildscript {
    repositories {
        mavenLocal()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.mycompany.plugins:my-awsome-plugin:1.0.0"
    }
}
相关问题