我目前正在使用Gradle插件,该插件的JAR包含一个XSL文件,我想在Gradle调用的Ant的xslt任务中使用该文件:

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)

因此,我想classpathloaderRef或两者都不对。从severalanswers读取后,我尝试了几种组合,但是它们都产生相同的错误。

为了使Gradle插件发现嵌入到其JAR中的资源,我需要指定什么?

最佳答案

它之所以无法正常工作的原因是,我错过了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)
}

10-07 19:30
查看更多