Я пытаюсь написать плагин Gradle для XML Beans. Я начал с одного из примеров плагина «Hello from Gradle», а также плагина, опубликованного R. Artavia here. Этот плагин пошел прямо в банку - я пытаюсь только генерировать источник. Сгенерированный источник затем должен быть скомпилирован с другим источником проекта и включен в одну банку. Другие цели включают - полный плагин - все, что мне нужно, это «применить плагин:« xmlbean »» - Я могу настроить местоположение исходного кода/кода и некоторые функции, если хочу - Он определяет, нужно ли его перестраивать. (ну, в конце концов !!!)Плагин Gradle для XML Beans
Я добрался до неплохого начала, но заблокировал определение нового источника. Я получаю сообщение об ошибке «Нет такого свойства« srcDirs »(или« srcDir »). Кажется, есть кое-что, что я должен определить где-нибудь, чтобы сделать новую работу sourceSet, но я не могу ее найти. Я пробовал несколько разных синтаксисов (с/без знака равенства, скобки, srcDir/srcDirs и т. Д. - ничего не работает ...
Что нужно сделать внутри плагина, чтобы новая запись источника была правильно распознана ?
Спасибо 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/заводной 2.3.10/JVM 7u55 на Windows 7 AMD64
Спасибо @ peter-ledbrook - как-то я не видел его на следующий день. Руководство порядочно, но groovy является новым для меня, и есть вещи, которые я еще не вижу; так как временный обходной путь я просто закодировал строку в блок конфигурации и передал ее в инструмент XMLBean. Я думаю, что вы говорите мне - в терминах «новичка», это то, что мне нужно переместить блок «xmlbeans {}» из того, что он является родным «главным» для одного из братьев «java» внутри основного или по крайней мере, где-то «глубоко». Я пробовал оба, но получил ошибки в обоих направлениях. –
Похоже, что иногда обозначения определяют что-то с новыми полями или локальными переменными/свойствами, а иногда поля уже существуют, и я не понял, когда применяются каждая из этих ситуаций. –
'main' - это часть, которую вы можете заменить. Таким образом, вы бы выбрали 'sourceSets {xmlbeans {java {srcDirs =" ... "}}}'. Однако, если он не содержит источник Java, я не думаю, что вы должны создать исходный набор вообще. –