如何将主机和端口参数传递给ant以供Java主函数使用

时间:2015-10-19 21:36:05

标签: java ant

我很难找到如何正确使用蚂蚁目标中的args。

我有一个蚂蚁目标,"我们的客户,"应该采用两个(或零)参数,一个主机和一个端口供客户端监听。我认为通过输入以下内容将参数传递给shell很容易:

ant our-client -Dhost.arg=127.0.0.1 -Dport.arg=8081

这似乎不起作用。在我的程序的主要功能中,我有一个记录器,它打印出传入的主机和端口。在解释我的ant构建文件中的内容之后,我会谈到它。

这是我为客户编写的目标。

<target name="our-client" depends="package" description="compiles, packages, and runs the student client">
    <java jar="${java.dist}/catan-client.jar" dir="${java.dist}" fork="yes">
        <arg value="${host.arg}"/>
        <arg value="${port.arg}"/>
        <sysproperty key="com.sun.management.jmxremote" value=""/>
        <assertions>
            <enable/>
        </assertions>
    </java>
</target>

我似乎无法理解的部分是这些&#34; arg&#34;&#34;工作。在ant构建文件的顶部,我已经定义了以下两个属性。

<property name="port.arg" value="8081"/>
<property name="host.arg" value="localhost"/>

我这样做是为了让这个特定目标的参数是可选的。如果没有提供,它将在默认设置下运行。

返回我的程序的主要功能。无论我在命令行输入什么,主机总是设置为localhost,端口类似地设置为8081.这是我的主函数内部的日志记录部分

public static void main(final String[] args)
{
...
  if (args.length == 2)
  {
    String host = args[0];
    String port = args[1];
    LOGGER.info("host: " + host + ", port: " + port);
  }
...
}

命令行始终显示:

INFO: host: localhost, port: 8081

我认为我必须在ant命令调用中弄乱一些东西。在我看来,它忽略了输入并使用每个属性的默认值。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

问题在于使用PowerShell。尽管您的ant命令在命令提示符中有效,但它在PowerShell中不起作用。 在PowerShell中,如果参数名称中包含句点(“。”),PowerShell会将其作为其他内容(可能是另一个ant命令)读取。相反,尝试这样做:

ant our-client "-Dhost.arg=127.0.0.1" "-Dport.arg=8081"