Adding local plugin to a Gradle project
我有一个Gradle插件,可以按预期进行编译和工作。 我想在源代码中分发一个使用Gradle插件的示例应用程序,这也使我可以轻松地测试对该插件的更改。 现在要执行此操作,我必须将类路径依赖项添加到
如果编写集成测试是您最终的目标,我仍然建议使用ProjectBuilder。您可以在此处的39.5.4节中看到一个示例。 gradle源代码中有更多实际测试实现示例。例如参见这里。
话虽如此,我对您发布的字面问题感到好奇,并尝试了一些尝试。对我有用的是:
1 2 3 4 5 6 7 8 9 10 11 | buildscript{ repositories{ ... } dependencies{ classpath files('relative/path/to/plugin.jar') } } apply plugin: fully.qualified.package.PluginClassName |
请注意,类名称未包含在
这不是很有用,因为此声明要求在构建使用该插件的项目之前先构建
第二个问题是插件项目的传递依赖项不会自动添加到您的插件用户项目中。
我无法在buildscript中使用像
确保插件项目在构建插件用户项目时始终可以构建并可用的一种(极其hacky)方式是拥有一个"父" build.gradle,该父对象始终在构建消费者项目之前首先构建插件。我在这里上传了一个例子。
当我想在Android Studio中调试
首先,将您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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')) } } } |
执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | buildscript { repositories { maven { url uri('../repo') } } dependencies { classpath group: 'com.egos.gradle.plugins', name: 'plugintest', version: '0.0.1' } } apply plugin: 'com.egos' |
在当前的Gradle版本(撰写本文时为3.3)中,您可以使用Composite Build功能来替代插件依赖项。
例如,您可以使用以下命令构建示例项目(在示例项目的根目录中运行):
这将从本地目录中提取您的插件。它甚至会首先构建您的插件,然后使用刚刚构建的插件作为依赖项来构建示例项目。
IDE也支持此功能:
在IntelliJ中配置Composite Build的简单说明
在此处查看文档:https://docs.gradle.org/current/userguide/composite_builds.html
注意,替换插件仅适用于buildscript块,而不适用于plugins块。
正如Doron所注意到的,找到了一种使用复合材料构建的干净方法。这些步骤是:
-
使用具有
group 的build.gradle 定义您的插件:
1 2 3 4 | // some-plugin/build.gradle ... group ="some.group.id" ... |
-
像这样在
settings.gradle 中引用您的项目:
1 2 3 | // settings.gradle ... includeBuild 'some-plugin' |
- 在您的项目中,您可以通过以下方式使用插件:
1 2 3 4 5 6 7 8 | // some-project/build.gradle buildscript { dependencies { classpath"some.group.id:some-plugin" } } apply(plugin:"your.plugin.id") |
注意,如何通过插件的gradle文件及其目录名称中定义的组来创建类路径。
除了上述答案。您还需要添加" gradlePlugin"和" uploadArchives",如下所示:
1 2 3 4 5 6 7 8 | gradlePlugin { plugins { testgen { id ="com.egos.gradle.plugins" implementationClass ="com.egos.gradle.plugins.<PluginClassName>" } } } |
而不是为此设置您的插件类名。
其余与上述答案相同。谢谢!