我目前正在开发一个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
或两者都错了。在通过several answers阅读similar questions之后,我尝试了几种组合,但它们都会产生相同的错误。
我需要指定什么才能让Gradle插件发现嵌入其JAR的资源?
答案 0 :(得分: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)
}