将本地插件添加到Gradle项目

Bob*_*ke4 32 java gradle

我有一个Gradle插件,可以按预期编译和工作.我想用源代码分发一个使用Gradle插件的示例应用程序,这也允许我轻松地测试对插件的更改.现在要做到这一点,我必须向buildScript块添加类路径依赖项.是否可以添加将使用示例项目编译的依赖本地插件?我现在遇到的主要问题是,在尝试同步示例项目时,插件不存在导致失败.

RaG*_*aGe 22

如果编写集成测试是您的最终目标,我仍然建议您使用ProjectBuilder.您可以在此处的第39.5.4节中看到此示例.gradle源中有更多真实的测试实现示例.比如这里.


话虽这么说,我对你发布的文字问题感到好奇,并尝试了一些事情.对我有用的是:

buildscript{
    repositories{
        ...
    }

    dependencies{
        classpath files('relative/path/to/plugin.jar')
    }
}

apply plugin: fully.qualified.package.PluginClassName
Run Code Online (Sandbox Code Playgroud)

请注意,类名不包含在'引号中'以使其成为字符串.

这不是很有用,因为这个声明要求在plugin.jar构建使用插件的项目之前构建和使用 - 但此时,您可能依赖于外部repo依赖项.

第二个问题是插件项目的传递依赖性不会自动添加到插件使用者项目中.

我无法获得项目依赖,比如classpath project(':plugin-project')在内部编写脚本.


在构建插件 - 消费者项目时,确保插件项目始终构建和可用的一种(非常hacky)方法是拥有一个"父"build.gradle,它始终在构建消费者项目之前构建插件.我在这里上传了一个例子.


Ego*_*ang 13

遇到我想gradle plugin在Android Studio中调试时,我终于解决了.

首先,将您上传gradle plugin到本地专家.

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile gradleApi()
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"


group='com.egos.gradle.plugins'
name='plugintest'
version='0.0.1'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

执行gradle uploadArchives.然后使用本地插件.

buildscript {
    repositories {
        maven {
            url uri('../repo')
        }
    }
    dependencies {
        classpath group: 'com.egos.gradle.plugins',
                  name: 'plugintest',
                  version: '0.0.1'
    }
}

apply plugin: 'com.egos'
Run Code Online (Sandbox Code Playgroud)


Cri*_*ian 6

正如 Doron 所注意到的,找到了一种使用复合构建的简洁方法。这些是步骤:

  • 使用build.gradle具有group以下内容的插件定义您的插件:
// some-plugin/build.gradle
...
group = "some.group.id"
...
Run Code Online (Sandbox Code Playgroud)
  • settings.gradle像这样引用您的项目:
// settings.gradle
...
includeBuild 'some-plugin'
Run Code Online (Sandbox Code Playgroud)
  • 在您的项目中,您可以通过以下方式使用该插件:
// some-project/build.gradle
buildscript {
  dependencies {
    classpath "some.group.id:some-plugin"
  }
}

apply(plugin: "your.plugin.id")
Run Code Online (Sandbox Code Playgroud)

请注意类路径是如何由插件的 gradle 文件中定义的组及其目录名称组成的。


Dor*_*old 5

在当前的Gradle版本(撰写本文时为3.3)中,您可以使用Composite Build功能来替代插件依赖项。

例如,您可以使用以下命令构建示例项目(在示例项目的根目录中运行): gradle build --include-build /path/to/local-plugin

这将从本地目录中提取您的插件。它甚至会先构建您的插件,然后再将刚刚构建的插件作为依赖项来构建示例项目。

IDE也支持此功能: 在IntelliJ中配置Composite Build的简单说明

在此处查看文档:https : //docs.gradle.org/current/userguide/composite_builds.html

注意,替换插件仅适用于buildscript块,而不适用于plugins块。