如何在包装器任务中设置分发类型

kup*_*fic 5 gradle

这似乎应该很简单,但我无法让它工作.我正在尝试设置distributionType包装器任务的属性,但它不起作用:

task wrapper(type: Wrapper) {
    gradleVersion = '4.1'
    distributionType = DistributionType.ALL
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行包装器任务时,我收到以下错误:

$ gradle wrapper

FAILURE: Build failed with an exception.

* Where:
Build file '.../build.gradle' line: 6

* What went wrong:
A problem occurred evaluating root project 'project'.
> Could not get unknown property 'DistributionType' for task ':wrapper' of type org.gradle.api.tasks.wrapper.Wrapper.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 0.613 secs
Run Code Online (Sandbox Code Playgroud)

请注意,我已下载最新的Gradle版本(4.1)并将其添加到我的bash路径:

$ gradle -version

------------------------------------------------------------
Gradle 4.1
------------------------------------------------------------

Build time:   2017-08-07 14:38:48 UTC
Revision:     941559e020f6c357ebb08d5c67acdb858a3defc2

Groovy:       2.4.11
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_144 (Oracle Corporation 25.144-b01)
OS:           Mac OS X 10.12.6 x86_64
Run Code Online (Sandbox Code Playgroud)

我试图设置它的方式似乎是合理的,因为它与我设置的方式相同gradleVersion,并且给出了以下实现 Wrapper.java:

public class Wrapper extends DefaultTask {

    public enum DistributionType {
        /**
         * binary-only Gradle distribution without sources and documentation
         */
        BIN,
        /**
         * complete Gradle distribution with binaries, sources and documentation
         */
        ALL
    }

    //...

    public void setGradleVersion(String gradleVersion) {
        this.gradleVersion = GradleVersion.version(gradleVersion);
    }

    // ...

    public void setDistributionType(DistributionType distributionType) {
        this.distributionType = distributionType;
    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

我已经看到了这个解决方法(如 StackOverflow中所述),它有效,但感觉有点太hacky ......

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我也重新跑了--stacktrace --debug.我将发布看似最相关的部分,而不是发布整个输出(非常大):

> Could not get unknown property 'DistributionType' for task ':wrapper' of type org.gradle.api.tasks.wrapper.Wrapper.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'slackscheduler'.
  at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92)
  at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:176)
  at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
  // many, many lines omitted
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'DistributionType' for task ':wrapper' of type org.gradle.api.tasks.wrapper.Wrapper.
  at org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:85)
  at org.gradle.internal.metaobject.ConfigureDelegate.getProperty(ConfigureDelegate.java:134)
  at build_90tinl1ipqqsdzvv3o3xs2adt$_run_closure1.doCall(/Users/justinrogers/Development/slack-scheduler/build.gradle:6)
  at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70)
Run Code Online (Sandbox Code Playgroud)

在一天结束时,表明我们在这里失败.

Jul*_*bin 8

我的猜测是:

ConfigureUtil帮助程序集将策略解析为Closure.OWNER_ONLY.在build.gradle中,您无权访问DistributionType枚举.如果您在任务之前的某处导入此枚举:

import org.gradle.api.tasks.wrapper.Wrapper.DistributionType
Run Code Online (Sandbox Code Playgroud)

没事的.另一种解决方案是分配

distributionType = Wrapper.DistributionType.ALL
Run Code Online (Sandbox Code Playgroud)