Gradle плагин для XML Beans
Я пытаюсь написать плагин Gradle для XML Beans. Я начал с одного из примеров плагинов "Hello from Gradle", а также с плагином, опубликованным Р. Артавией здесь. Этот плагин пошел прямо к банке - я пытаюсь только генерировать источник. Сгенерированный источник должен быть скомпилирован с другим источником проекта и включен в один jar. Другие цели включают - полный плагин - все, что мне нужно, это "применить плагин: 'xmlbean'" - я могу настроить местоположение источника / кода и некоторые функции, если я хочу - он определяет, нужно ли его перестраивать. (ну в конце концов!!!)
У меня хорошее начало, но я не могу определить новый набор исходных кодов. Я получаю сообщение об ошибке "Нет такого свойства" 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: версия 2.5 / Groovy 2.3.10 / JVM 7u55 на Windows 7 AMD64
1 ответ
Вы должны попытаться ознакомиться со справочным руководством Gradle DSL, потому что оно очень помогает в подобных ситуациях. Например, если вы нажмете на sourceSets { }
ссылка на левой панели навигации, вы попадаете в этот раздел по исходным наборам.
Оттуда вы обнаружите, что sourceSets {}
блок поддерживается классом, SourceSetContainer
, Следующий уровень конфигурации, вложенный внутрь, поддерживается SourceSet
объект, а затем внутри этого у вас есть один или несколько SourceDirectorySet
конфигурации. Когда вы переходите по ссылке на SourceDirectorySet
вы увидите, что есть getSrcDirs()
а также setSrcDirs()
методы.
Так как это поможет? Если вы внимательно посмотрите на исключение, вы увидите, что Gradle говорит, что не может найти srcDirs
собственность на DefaultSourceSet_Decorated
, который вы можете надеяться сделать вывод является примером SourceSet
, Этот интерфейс не имеет srcDirs
имущество. Это потому что твой xmlbeans {}
блок настраивает SourceSet
не SourceDirectorySet
, Вам нужно добавить еще одну вложенную конфигурацию, чтобы получить доступ к srcDirs
,
На данный момент мне интересно, является ли новый набор источников подходящим решением. К сожалению, мне не совсем ясно, что плагин должен делать, поэтому я не могу предложить никаких альтернатив на данный момент.