3

xslt私は現在、Gradle プラグインに取り組んでおり、そのプラグインの JAR には、 Gradle によって呼び出される Ant のタスクで使用したい XSL ファイルが含まれています。

ant.xslt(in: reports.xml.destination,
         out: new File(reports.xml.destination.parent, basename + '.html')) {
    style {
         // From https://svn.apache.org/repos/asf/hive/trunk/checkstyle/checkstyle-noframes-sorted.xsl.
        javaresource(name: 'checkstyle-noframes-sorted.xsl')
    }
}

ただし、checkstyle-noframes-sorted.xslプラグイン JAR のほぼすべてのディレクトリに を含めましたが、まだ取得しています

Caused by: : stylesheet checkstyle-noframes-sorted.xsl doesn't exist.
    at org.apache.tools.ant.taskdefs.XSLTProcess.handleError(XSLTProcess.java:1413)

classpathしたがって、どちらか、loaderRefまたは両方が間違っていると思います。同様の質問に対するいくつかの 回答を読んだ後、いくつかの組み合わせを試しましたが、すべて同じエラーが発生します。

Gradle プラグインが JAR に埋め込まれたリソースを検出できるようにするには、何を指定する必要がありますか?

4

1 に答える 1

0

そのままでは機能しない理由は、クラスパスを明示的に変更するクロージャーant.xsltで呼び出しがラップされていることを見逃していたからです。antBuilder.withClasspath(getCheckstyleClasspath()).executeしたがって、最も簡単な解決策はant.xslt、その閉鎖から抜け出すことです。

それがあなたのケースに当てはまる場合、別の解決策は、XSL ファイルを Groovy コードの変数にロードし、それを文字列として Ant に渡すことです。

def xsl = Checkstyle.getClassLoader().getResourceAsStream('checkstyle-noframes-sorted.xsl')
// ...
style {
   string(value: xsl.text)
}
于 2015-08-19T12:08:49.357 に答える