【问题标题】:Set a system property with ant用 ant 设置系统属性
【发布时间】:2014-02-04 13:04:35
【问题描述】:

我有一个带有taskdef 的 ant 脚本,该任务创建了一个 https 互联网连接,而 SSL 的东西是错误的。因此我想设置系统属性javax.net.debug=all 以获取更多信息。

在 java 中,我会使用 -D 选项来执行此操作,但在 ant 中,这用于与系统属性不同的 ant 属性。

如果这不是taskdef 而是java 任务,我可以使用sysproperty 属性,但它不是java-任务。

对此进行谷歌搜索非常复杂,因为 ant 属性和 ant 中的系统属性非常相似,以至于大多数搜索结果都是关于另一个(或关于 java-task)的。

显然我不是唯一一个遇到问题的人,但我发现的其他人的问题 (like here) 没有得到解答或被破解(例如 here)。

【问题讨论】:

    标签: ant system-properties


    【解决方案1】:

    设置此类属性的一种方法是ANT_OPTS 系统变量。您必须非常小心,不要简单地浏览 google 上声明选项可以这样设置的答案,因为这听起来很像它的作用:

    documentation 说:

    ANT_OPTS - 应该传递给 JVM 的命令行参数。 例如,您可以定义系统属性或设置最大 Java 这里的堆大小。

    谁预料到了什么? ANT_OPTS 是 JVM 的选项,而不是顾名思义的 ant 选项。用于 ant 选项的 var 称为 ANT_ARGS。

    现在我可以像这样启动 ant:ANT_OPTS="-Djavax.net.debug=all" ant myTarget 并且可以看到大量的日志输出。

    (但是,这样一个变量是否可以使用 XML 设置仍然存在问题)。

    【讨论】:

    • 谢谢,这个信息对我有很大帮助,因为我试图弄清楚为什么 jenkins 会在 Build -> Invoke Ant -> Properties 中定义它时采用“错误”值,例如user.name = prod。当在 Java 选项(使用 ANT_OPS)中定义为 -Duser.name=prod 时,一切正常。系统属性 user.name 被覆盖。
    【解决方案2】:

    您可以使用<sysproperty key="key" value="value"/> 在xml 中声明系统属性。

    http://www.java2s.com/Code/Java/Ant/SetsystempropertiesinAntbuildscript.htm

    【讨论】:

    • 这只能用于java任务。请参阅我的问题中的第三段:“如果这不是 taskdef 而是 java 任务,我可以使用 sysproperty 属性,但它不是 java-task。”
    【解决方案3】:

    您可以使用脚本:

    <script language="javascript">      
        java.lang.System.setProperty('myKey', 'myValue');
    </script>
    

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多