首页 文章

Gradle:从应用的脚本导入插件类

提问于
浏览
1

我正在使用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

我试图从app build.gradle 删除 apply from: "${gradleDirPath}/java-docker.gradle" 并直接在app build.gradlethis is working 直接应用插件和导入 .

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

1 回答

  • 1

    问题是新的插件机制没有将 plugin classes 添加到脚本类路径 . 它们只适用于root 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
    

    我还在我的root中删除了docker的插件条目 build.gradle

    Edit for opal

    我的目录结构如下:

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

相关问题