我正在尝试为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
答案 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
。
此时,我想知道新的源集是否是合适的解决方案。不幸的是,我并不清楚这个插件应该做什么,所以我现在无法提供任何替代方案。