0

ベンダー ライブラリを使用して、Xml から Java ソースを生成します。このソース xml は、いくつかの jar ファイルに存在する他の xml をインポートします。このJarファイルの座標を知っています。ベンダー ライブラリは私にとってブラックボックスですが、ThreadContextClassLoader を使用して jar からインポートをロードすることは知っています。ただし、クラスパス/jar からインポートされた xml が見つからないため、失敗します。

これを達成するためのgradleの方法は何ですか?

// body of gradle task
@TaskInput
void execute(IncrementalTaskInputs inputs) {
   inputs.outOfDate { changes ->
       // CodeGenerator is the vendor library
       CodeGenerator generator = new CodeGenerator();
       // call some setter methods to set the inputs.
       //
       generators.setXml(file("<path/to/the-file"))
       generator.generate();
   } 
}
4

3 に答える 3

1

メソッドはCodeGeneratorありsetClassloader(Classloader)ますか?おそらく aConfigurationと a を使用できますURLClassloader。例えば:

configurations {
   codeGenerator
}
dependencies {
   codeGenerator 'foo:bar:1.0'
   codeGenerator 'baz:biff:2.0'
}
task generateCode {
    inputs.files configurations.codeGenerator
    outputs.dir "$buildDir/codeGenerator"
    doLast {
        URL[] urls = configurations.codeGenerator.files.collect { it.toUri().toUrl() }
        Classloader cl = new URLClassLoader(urls, null)
        CodeGenerator generator = new CodeGenerator()
        generator.setClassLoader(cl)
        ...
        generator.generateTo("$buildDir/codeGenerator")
    }
}

ここで同様の概念を参照してください

于 2017-11-30T16:08:40.860 に答える