Gradle XML Beans 插件

Gradle plugin for XML Beans

我正在尝试为 XML Beans 编写一个 Gradle 插件。我从 'Hello from Gradle' 插件示例之一开始,还有一个由 R. Artavia here 发布的插件。该插件直接进入 jar - 我试图只生成源代码。然后必须将生成的源代码与其他项目源代码一起编译并包含在一个 jar 中。其他目标包括 - 完整的插件 - 我只需要 "apply plugin: 'xmlbean'" - 如果我愿意,我可以配置 source/code gen 位置和一些功能 - 它检测是否需要重建。 (嗯,最终!!!)

我的开端不错,但无法定义新的 sourceSet。我收到错误 "No such property 'srcDirs'"(或 'srcDir')。似乎我必须在某个地方定义一些东西才能使新的 sourceSet 工作,但我找不到它。我尝试了几种不同的语法(with/without 等号、括号、srcDir/srcDirs 等 - 没有任何效果...

我需要在插件内部做什么才能正确识别新的 sourceSet 条目?

谢谢! 杰科

文件:xmlbean.gradle(包括用于调试的问候语插件)

apply plugin: xmlbean
apply plugin: 'java'

xmlbean {
  message = 'Hi'
  greeter = 'Gradle'
}

class xmlbean implements Plugin<Project> {

  void apply(Project project) {

    project.extensions.create("xmlbean", xmlbeanExtension)
    Task xmlbeanTask = project.task('xmlbean')
    xmlbeanTask << {

      project.configurations {
        xmlbeans
      }

      project.dependencies {
        xmlbeans 'org.apache.xmlbeans:xmlbeans:2.5.0'
      }

      project.sourceSets {
        main {
          java {
            srcDirs += '$project.buildDir/generated-source/xmlbeans'
          }
        }
        xmlbeans {
          srcDirs = ['src/main/xsd']
        }
      }

      ant.taskdef(name: 'xmlbean',
                  classname: 'org.apache.xmlbeans.impl.tool.XMLBean',
                  classpath: project.configurations.xmlbeans.asPath)
      ant.xmlbean(schema: project.sourceSets.xmlbean.srcDir,
                  srconly: true,
                  srcgendir: "$project.buildDir/generated-sources/xmlbeans",
                  classpath: project.configurations.xmlbeans.asPath)

      println "${project.xmlbean.message} from ${project.xmlbean.greeter}"
    }
    project.compileJava.dependsOn(xmlbeanTask)
  }
}

class xmlbeanExtension {
  String message
  String greeter
}

文件:build.gradle

apply from: '../gradle/xmlbeans.gradle'

dependencies {
  compile "xalan:xalan:$ver_xalan",
          ":viz-common:0.0.1",
          ":uform-repository:0.1.0"
}

控制台:错误消息:

:idk:xmlbean FAILED

FAILURE: Build failed with an exception.

* Where:
Script 'C:\jdev\cpc-maven\try.g2\comotion\gradle\xmlbeans.gradle' line: 32

* What went wrong:
Execution failed for task ':idk:xmlbean'.
> No such property: srcDirs for class: org.gradle.api.internal.tasks.DefaultSourceSet_Decorated
...
BUILD FAILED

Gradle 信息:版本 2.5 / groovy 2.3.10 / Windows 7 AMD64

上的 JVM 7u55

您应该尝试熟悉 Gradle DSL 参考指南,因为它在这种情况下会有很大帮助。例如,如果您单击左侧导航栏中的 sourceSets { } link,您将转到 this section 源集。

从那里,您会发现 sourceSets {} 块由 class、SourceSetContainer 支持。嵌套在其中的下一级配置由 SourceSet 对象支持,然后在其中您有一个或多个 SourceDirectorySet 配置。当您按照 link 到 SourceDirectorySet 时,您会看到有 getSrcDirs()setSrcDirs() 方法。

那么这有什么帮助呢?如果您仔细查看异常,您会看到 Gradle 表示它无法在 DefaultSourceSet_Decorated 上找到 srcDirs 属性,您可以推断这是一个SourceSet 的实例。该接口 而不是 具有 srcDirs 属性。那是因为您的 xmlbeans {} 块正在配置 SourceSet,而不是 SourceDirectorySet。您需要添加另一个嵌套配置才能访问 srcDirs.

此时,我想知道新的源集是否是合适的解决方案。不幸的是,我不清楚这个插件到底应该做什么,所以我现在不能提供任何替代方案。