当前位置: 首页 > 知识库问答 >
问题:

向Gradle项目添加本地插件

堵恺
2023-03-14

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

共有3个答案

谷弘致
2023-03-14

在当前的Gradle版本(截至编写时为3.3)中,您可以使用复合构建功能来替换插件依赖项。

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

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

IDE也支持此功能:在IntelliJ中配置复合构建的简单说明

请参阅此处的文档:https://docs.gradle.org/current/userguide/composite_builds.html

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

岳和泽
2023-03-14

当我想在Android Studio中调试我的gradle插件时,我终于解决了。

首先,将你的gradle插件上传到本地maven。

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'))
        }
    }
}

执行gradle上传存档。然后使用本地插件。

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

apply plugin: 'com.egos'
国胤
2023-03-14

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

话虽如此,我对你贴出的文字问题感到好奇,并尝试了一些事情。对我有效的是:

buildscript{
    repositories{
        ...
    }

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

apply plugin: fully.qualified.package.PluginClassName

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

这不是很有用,因为这个声明需要插件。jar将在构建使用插件的项目之前构建并可用,但在这一点上,您可能还需要依赖于外部回购依赖关系。

第二个问题是插件项目的传递依赖项不会自动添加到您的插件消费者项目中。

我无法让像类路径项目(': plugin-project')这样的项目依赖项在buildscript中工作。

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

 类似资料:
  • 我想将google services的Gradle插件从本地jar应用到Java项目中,这样我的构建就不需要连接到jcenter来下载插件。 我已经下载了,但是我不知道如何告诉gradle从文件中加载插件。 这是我的构建。格雷德尔

  • 我在Java的早期版本中使用了Maven,但现在我正试图让它在Java 10中工作。我构建了一个简单的Hello world项目,具体来说: 公共课堂测试{ }使用模块信息类: 模块maven.test{导出main;} 与本项目相关的pom为: http://maven.apache.org/xsd/maven-4.0.0.xsd" 当我构建项目时,它成功构建。然后,我从Maven中央存储库添加

  • 此外,我们的Java源文件位于src目录的根目录中,而不是标准的src/main/Java。 有没有一种方法,我可以添加Gradle到我的项目,不会让我删除和重新创建我的IntelliJ项目,也不会把其他人搞砸,当他们做一个Git拉动?

  • 我正在为一个供应商做一个库项目,它需要Android Volley作为一个依赖项。我已经在Android Studio中使用了这个Create aar文件来创建.aar文件,并将其包含在一个测试项目中,我正在使用这个添加本地.aar文件到使用“flatdirs”的Gradle build中是不起作用的。库链接精细,项目编制无差错。但在运行时,测试应用程序崩溃,说它找不到Volley 我的图书馆项目

  • 我写了一个gradle插件,我只想在我自己的项目中使用。下面是一个简化的文件结构: 我通过引用jar文件将插件添加到模块 一开始效果很好,但有一个问题。如果您清理项目并尝试再次构建它,它将失败,因为'。/plugin/build/libs/payload-plugin-0.0.1-SNAPSHOT。jar不再存在,它将不会尝试重建插件模块,因为这将被视为配置错误。 我尝试只使用gradlew:so