【问题标题】:How to import external gradle script file with plugins imported correctly in Gradle?如何使用在 Gradle 中正确导入的插件导入外部 gradle 脚本文件?
【发布时间】:2018-04-15 04:22:56
【问题描述】:

从外部 Gradle 脚本文件应用时遇到插件导入错误。 例如: 在文件 gradle/lambda.gradle 中:

apply plugin: 'base'
apply plugin: 'jp.classmethod.aws.lambda'

import com.amazonaws.services.lambda.model.InvocationType;

import jp.classmethod.aws.gradle.lambda.AWSLambdaDeleteFunctionTask;
import jp.classmethod.aws.gradle.lambda.AWSLambdaInvokeTask;
import jp.classmethod.aws.gradle.lambda.AWSLambdaMigrateFunctionTask;
import jp.classmethod.aws.gradle.lambda.AWSLambdaPublishVersionTask;
import jp.classmethod.aws.gradle.lambda.AWSLambdaCreateAliasTask;
import jp.classmethod.aws.gradle.lambda.AWSLambdaUpdateAliasTask;

import jp.classmethod.aws.gradle.lambda.VpcConfigWrapper

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }

    }
    dependencies {
        classpath "jp.classmethod.aws:gradle-aws-plugin:0.38"
    }
}

build.gradle 文件中,我通过这种方法应用外部脚本:

apply from: 'gradle/lambda.gradle'

但它会产生关于插件导入的错误:

Plugin with id 'jp.classmethod.aws.lambda' not found.

可以通过在 build.gradle 文件中包含相同的 buildscript 代码块来解决。

这个问题的根本原因是什么? 实现此目标的推荐方法是什么?

【问题讨论】:

    标签: java gradle package


    【解决方案1】:

    基于my answer here,您应该这样做:

    另一方面,您可以将您的buildscript 屏蔽 进入根项目的build.gradle 文件,然后所有其他 来自子项目的构建文件将继承此块。

    edit :由于导入,它将无法工作。在gradle/lambda.gradle 中需要classpath "jp.classmethod.aws:gradle-aws-plugin:0.38" 来解析import,在build.gradle 中也需要它,因为插件jp.classmethod.aws.lambda 从这里应用(通过apply from

    【讨论】:

    • 其实不是多项目或子项目的情况。我正在尝试将 build.gradle 文件拆分为不同的文件以提高模块化。而且我试图从一个 gradle 文件(build.gradle 文件和 lambda.gradle)中删除重复的 buildscript 块,它会使编译失败。
    • 在最顶层的build.gradle中添加buildscript即可,所有依赖都集中在这里
    • 仅与顶级 build.gradle 中的 buildscript 不能很好地配合使用。 Cause: startup failed: script '/Users/peixu/workspace/web-crawler/gradle/lambda.gradle': 14: unable to resolve class jp.classmethod.aws.gradle.lambda.VpcConfigWrapper @ line 14, column 1. import jp.classmethod.aws.gradle.lambda.VpcConfigWrapper ^ script '/Users/peixu/workspace/web-crawler/gradle/lambda.gradle': 8: unable to resolve class jp.classmethod.aws.gradle.lambda.AWSLambdaInvokeTask @ line 8, column 1. import jp.classmethod.aws.gradle.lambda.AWSLambdaInvokeTask;
    • 我猜是import的原因,顶层buildscript只对apply plugin有效
    • 正是由于导入。你知道如何解决导入问题吗?
    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多