在 Gradle 插件中使用 Ant 的 xslt 任务并使其查找资源



我目前正在开发一个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或两者都是错误的。在阅读了几个类似问题的答案后,我尝试了几种组合,但它们都产生了同样的错误。

为了让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)
}

相关内容

  • 没有找到相关文章

最新更新