Как получить 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'
}
Другие вопросы по тегам