Ant <junitreport> 由于 Xalan 的 (XSLT) 安全处理功能而失败
Posted
技术标签:
【中文标题】Ant <junitreport> 由于 Xalan 的 (XSLT) 安全处理功能而失败【英文标题】:Ant <junitreport> fail because of Xalan's (XSLT) secure processing feature 【发布时间】:2012-01-04 15:19:47 【问题描述】:我的 junit 测试在我的 Eclipse 环境中通过 ant 1.7 运行,但在执行 junitreport 任务时构建失败:
构建失败 .../build.xml:222:应用转换时出错: javax.xml.transform.TransformerException:java.lang.RuntimeException: 使用扩展函数'xalan://org.apache.tools.ant.util.StringUtils:replace' 安全处理功能设置为 true 时不允许使用。
我试图弄清楚如何使 junitreport 任务禁用安全处理功能(我不需要并且目前只是在我的方式)但我不知道如何因为该任务没有属性来禁用它。还是我应该做其他事情来完成这项工作?
【问题讨论】:
【参考方案1】:我试图弄清楚如何使 junitreport 任务禁用安全处理功能(我不需要并且目前只是在我的方式)但我不知道如何因为该任务没有属性来禁用它。
您可以随时将任务注释掉。
【讨论】:
感谢您的回答。也许我的句子并不完全清楚。我想禁用“安全处理功能”,但我确实需要 junitreport。【参考方案2】:这可能与一个非常相似的known bug in Ant 1.8.2 有关。
bugfix for Ant 1.8.3 已提交,但截至 2012 年 1 月 25 日,Apache Ant 1.8.3 尚未发布。此错误修复的最新描述是:
<junitreport> did not work in embedded environments on JDK 7.
Bugzilla Report 51668.
一旦 Ant 1.8.3 发布并被合并到 Eclipse Ant 插件中,这个问题应该会得到解决。
同时,您可以编辑构建脚本,使其仅在从命令行运行 Ant 时运行 JUnitReport 目标,而不是从 Eclipse 中运行。要进行此确定,请在您的常规 %ANT_HOME%/lib 文件夹中查找一个文件,该文件不在您的 Eclipse Ant 插件文件夹中(或在那里创建一个文件),然后设置一个属性,如果检测到文件。例如
就在您的 JUnit 目标结束之前:
<available file="$ant.home/lib/ant.pom" property="full.ant"/>
在您的 JUnitReport 目标的开头:
<target name="junitreport" description="Create a consolidated test results report" if="full.ant">
上面的 Ant 片段可以工作,因为只有在 Eclipse 中运行 Ant 时,ant.home 才设置为 Eclipse Ant Plugin 文件夹。当从命令行运行 Ant 时,ant.home 将匹配您的 ANT_HOME 环境变量。还应该有一个 eclipse.running Ant 属性,但我无法检测到这个属性。
另一个临时选项是从 Apach Ant 项目页面上的 this link 下载 Ant nightly build 的最新 JAR 文件,然后将这些 JAR 文件放在相应的 Eclipse Ant 插件子文件夹中。不保证这会奏效。
【讨论】:
以上是关于Ant <junitreport> 由于 Xalan 的 (XSLT) 安全处理功能而失败的主要内容,如果未能解决你的问题,请参考以下文章