XML Bean的Gradle插件

时间:2015-07-22 14:05:24

标签: gradle xmlbeans gradle-plugin

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

我有一个非常好的开始,但我被阻止定义一个新的sourceSet。我收到错误“没有这样的属性'srcDirs'”(或'srcDir')。似乎有一些东西我必须定义一个地方来使新的sourceSet工作,但我找不到它。我尝试了几种不同的语法(有/无等号,括号,srcDir / srcDirs等等 - 没有什么工作......

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

谢谢! JKE

文件: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 info:Windows 7 AMD64上的2.5版本/ groovy 2.3.10 / JVM 7u55

1 个答案:

答案 0 :(得分:3)

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

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

那么这有什么用呢?如果仔细查看异常情况,您会发现Gradle说它无法在srcDirs上找到DefaultSourceSet_Decorated属性,您可以将其推断为SourceSet的实例1}}。该接口具有srcDirs属性。这是因为您的xmlbeans {}阻止了SourceSet,而不是SourceDirectorySet。您需要添加另一个嵌套配置才能访问srcDirs

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