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) 安全处理功能而失败的主要内容,如果未能解决你的问题,请参考以下文章

Java的Ant文件是啥?如何创建?

Ant zipfileset包含目录中的文件,但如果它们在另一个目录中重复,则不会

如何写ant的打包命令

ANT:使用条件标签,

POJ 1696 Space Ant

自动部署工具ant