Gradle:从应用的脚本

时间:2017-10-12 14:48:38

标签: java gradle plugins import

我使用gradle(多项目包装器)运行一个奇怪的行为:

我的根build.gradle文件

plugins {
    // Docker plugin
    id "de.gesellix.docker" version "2017-10-05T23-00-11"
}

脚本助手java-docker.gradle

apply plugin: "de.gesellix.docker"

import de.gesellix.gradle.docker.tasks.DockerBuildTask
import de.gesellix.gradle.docker.tasks.DockerTask

task prepareDockerImage(type: DockerBuildTask, dependsOn: war) {
    // Task here
}

和我的申请build.gradle

apply from: "${gradleDirPath}/java-docker.gradle"
apply from: "${gradleDirPath}/java-webapp.gradle"

dependencies {
    // App dependencies
}

运行./gradlew help时遇到:

  

无法解析类de.gesellix.gradle.docker.tasks.DockerTask
  @第6行,第1列。        import de.gesellix.gradle.docker.tasks.DockerTask

  

无法解决课程   de.gesellix.gradle.docker.tasks.DockerBuildTask @第5行,第1列。        import de.gesellix.gradle.docker.tasks.DockerBuildTask

我已尝试从应用apply from: "${gradleDirPath}/java-docker.gradle"中删除build.gradle,并直接在应用build.gradle中直接应用插件和导入,此功能正常正如所料。

知道为什么从应用脚本导入失败了吗?

1 个答案:

答案 0 :(得分:1)

问题是新的插件机制没有将插件类添加到脚本类路径中。它们仅适用于根build.gradle和项目build.gradle

所以我不得不回到旧的buildscript机制

我的java-docker.gradle现在看起来像是:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
   classpath "de.gesellix:gradle-docker-plugin:2017-10-05T20-48-17"
  }
}

apply plugin: de.gesellix.gradle.docker.DockerPlugin

import de.gesellix.gradle.docker.tasks.DockerBuildTask
import de.gesellix.gradle.docker.tasks.DockerTask

我还在我的根build.gradle

中删除了docker的插件条目

编辑opal

我的目录结构如下:

.
├── buildsystem
│  ├── build.gradle
│  ├── gradle
│  │  └── java-docker.gradle
│  ├── gradle.properties
│  ├── gradlew
│  ├── gradlew.bat
│  ├── README.md
│  └── settings.gradle
└── myapp
  ├── build.gradle
  └── settings.gradle