我目前正在使用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读取后,我尝试了几种组合,但是它们都产生相同的错误。为了使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)
}