当前位置: 首页 > 面试题库 >

如何为ant junit命令提供条件jvmarg?

端木明贤
2023-03-14
问题内容

我们的车间在Java 6、7和8上设置了多个构建和测试环境(Jenkins,Ant 1.9.6)。仅在Java
7上,为了使测试成功运行,我们需要添加JVM参数-XX:-UseSplitVerifier

我不能使用conditioninside junit,所以我在init任务中设置了一个布尔属性:

<condition property="usesplitverifier">
    <equals arg1="${ant.java.version}" arg2="1.7" />
</condition>

在我的test任务中,仅当该属性为时jvmargjunit才需要添加true

<echo message="usesplitverifier: ${usesplitverifier}" />

<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
    <jvmarg if="usesplitverifier" value="-XX:-UseSplitVerifier" />
    ...
</junit>

输出为:

        [echo] usesplitverifier: true

BUILD FAILED
C:\workspace\util\build.xml:141: jvmarg doesn't support the "if" attribute

我试图避免在我们的构建/测试环境中添加ant-contrib。另外,我想避免向构建脚本添加更多目标(我正在尝试简化构建过程)。还有另一种方法可以在这里工作吗?


问题答案:

当我在写这个问题,我找到了解决方案的另一个问题是被关闭的含义过于模糊。我决定发布此问题,以提供一个特定的用例。

的如果/除非命名空间可以以任何Ant命令一起使用。就我而言,我需要将if名称空间添加到项目中:

<project name="my-project" xmlns:if="ant:if" ...>

然后将条件放在jvmarg如下:

<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
    <jvmarg if:set="usesplitverifier" value="-XX:-UseSplitVerifier" />
    ...
</junit>

if:set在这种情况下起作用的原因是,如果${ant.java.version}不是1.7,则该属性保持未设置状态。

注意事项(在我的情况下可以接受):

  • if/unless命名空间是唯一可用的,因为蚂蚁1.9.1。
  • 在Ant 1.6之前,${ant.java.version}返回用于编译Ant的JVM版本。


 类似资料:
  • 我正在尝试更新数据库表。如果表单中的密码为空,我如何通过提供一个条件来防止表单中的密码(“memberpassword”,$pass)被sql代码更新?有可能吗?

  • 问题内容: 我想提供查询的表名作为命令参数,如下所示: 这似乎导致了该查询:这将导致错误(注意单引号)。 我真的需要为此进行字符串连接吗?从安全的角度来看这没关系,因为用户无法更改表名,但是用于创建SQL查询的字符串连接总是让我感到毛骨悚然… 谢谢,埃里克 问题答案: 表名不能作为参数发送。表名称在解析时解析,因为计划和此类操作需要它们。仅在执行程序(或优化程序,必要时)时替换参数。 是的,您将需

  • 我想使用不同的csv配置文件为不同的负载/线程运行相同的JMX文件。假设 csv 文件包含用户名和密码的数据。对于 test1 csv 文件有 1000 行,而 test2 csv 文件有 2000 行,如下所示。 我如何通过命令行为相同的JMX文件提供不同的csv文件以获得不同的线程数。 我知道我可以通过命令行使用像${__P(threads,)}这样的__P()函数来传递threads、ram

  • 我正在尝试使用Jcraft-Jsch库通过Java应用程序管理路由器。 我正试图通过TFTP服务器发送路由器配置。问题出在我的Java代码中,因为这适用于PuTTY。 这是我的Java代码: 我明白了 行的自动命令“192.168.50.1”无效 问题是如何运行这些连续的命令。

  • 我在想类似的事情 有这样的东西吗?我知道(我认为)当您使用Pycharm执行脚本时,它会临时修改;皮查姆是怎么做到的? 我想这样做的原因是,我有一些通常需要在我自己的机器上运行的代码(这很好,因为我使用Py魅力来运行它),但有时需要在远程服务器上运行(在命令行上),并且它不起作用,因为远程服务器没有Py魅力自动临时添加的s。我不想因为经常更改它是一个很大的麻烦(假设它真的需要经常更改)。

  • 不确定为什么我会出现这个错误,我觉得我错过了一些非常简单的东西。这是我在试图跟随这篇文章从命令行创建JAR可执行文件时面临的一个问题。以下是我的简单测试文件: 例如。爪哇: 显示MF: 我运行以下命令来构造JAR: 然而,当我运行时,我得到以下错误: 在JAR中达到峰值时,会出现正确的类文件,但会出现以下自动生成的清单,,存在于: 那么我对命令的用法哪里不正确呢?为什么它不能识别我提供的清单文件?