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