Как получить Gradle Buildship для успешного создания моего кода JAXB в Eclipse?
У меня есть проект Java, который зависит от набора классов, сгенерированных JAXB, из набора корпоративных XML-схем. До этого момента я использовал XJC через командную строку для генерации своих классов JAXB, но сейчас я пытаюсь интегрировать свою команду xjc в мой проект Java Eclipse с помощью buildship. Я удалил свои классы JAXB и попытался перестроить свой Java-проект через интерфейс затмения eclipse. Моя проблема в том, что мой java продолжает пытаться скомпилировать, прежде чем он перестраивает мои классы JAXB, и это просто выплевывает ошибки компиляции и завершает работу. Я попытался использовать плагин JAXB, и теперь я просто пытаюсь вызвать вызов Groovy в Gradle, но безуспешно.
Теперь моя задача GenerateJaxb может быть повреждена, но я не могу даже выполнить ее так далеко, поэтому я еще не смог ее протестировать!
Вот мой код build.gradle:
//apply your plugins
plugins {
id "java"
}
repositories {
jcenter()
}
dependencies {
// The production code uses the SLF4J logging API at compile time
compile 'org.slf4j:slf4j-api:1.7.21'
// log4j
compile 'log4j:log4j:1.2.17'
// google guava library
compile 'com.google.guava:guava:r05'
// Declare the dependency for your favourite test framework you want to use in your tests.
// TestNG is also supported by the Gradle Test task. Just change the
// testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
// 'test.useTestNG()' to your build script.
testCompile 'junit:junit:4.12'
}
task GenerateJaxb(type:Exec){
workingDir 'C:\\Program Files\\Java\\jdk1.8.0_73\\bin'
commandLine 'xjc.exe -d C:\\SVN\\Tibco\\Java\\branches\\SBC_Gradle\\src\\generated\\java C:\\SVN\\Tibco\\Projects\\HIPAA\\834\\trunk\\834Automation\\Schemas\\Canonical\\SBCCalculator2017.xsd -extension -p schema'
println "ran GenerateJaxb task"
}
Обновление: я смог исправить свою задачу, и теперь сборка успешно завершена (исправлено в исходном коде выше), но когда я запускаю задачу сборки gradle, она не перестраивает мой JAXB.
1 ответ
Наконец-то разобрался. Надеюсь, это поможет кому-то:)
/*
* This build file was auto generated by running the Gradle 'init' task
*/
//apply your plugins
plugins {
id "java"
}
//This task will rebuild the generated classes in the schema directory based on the SBC calculator canonical xsd.
task GenerateJaxb(){
//This is the argument array that will be passed to the JAXB program called xjc.exe
def argList = []
//each argument that is separated by a space must be defined as its own element within the array.
//for example, -d tells xjc that you are going to define the target directory, and in the next argument you
//define that target directory. Each of those space delimited pieces of text are considered separate arguments
//the next to arguments define the target directory (-d) in which the generated files will be placed
argList << '-d'
//relative project pathing
argList << 'src\\main\\java'
//source of schema file to convert into java objects
argList << 'C:\\SVN\\Tibco\\Projects\\Schemas\\Canonical\\calculator.xsd'
//allow vendor extensions - do not strictly follow the Compatibility Rules and App E.2 from the JAXB Spec
argList << '-extension'
//the next two arguments define the java package in which to place the objects
argList << '-p'
argList << 'com.sbc.schema'
def output
//this executes your shell script
output = exec {
// your path needs to be set to your jdk bin directory for this to work
commandLine = 'xjc.exe'
//pass your arguments array
args = argList
}
}
// In this section you declare where to find the dependencies of your project
repositories {
// Use 'jcenter' for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
// In this section you declare the dependencies for your production and test code
dependencies {
// The production code uses the SLF4J logging API at compile time
compile 'org.slf4j:slf4j-api:1.7.21'
// log4j
compile 'log4j:log4j:1.2.17'
// google guava library
compile 'com.google.guava:guava:r05'
// Declare the dependency for your favourite test framework you want to use in your tests.
// TestNG is also supported by the Gradle Test task. Just change the
// testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
// 'test.useTestNG()' to your build script.
testCompile 'junit:junit:4.12'
}