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



我很难找到如何在ant目标中正确使用args。

我有一个ant目标,"our-client",它应该有两个(或零)参数,一个主机和一个端口供客户端侦听。我认为通过输入

将参数传递给shell会很容易:
ant our-client -Dhost.arg=127.0.0.1 -Dport.arg=8081

这似乎不起作用。在我的程序的main函数中,我有一个记录器,它打印传入的主机和端口。在我解释我的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>

我似乎不能理解的部分是这些"参数"是如何工作的。在ant构建文件的顶部,我定义了这两个属性,如下所示:

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

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

回到程序的主函数。无论我在命令行中输入什么,主机总是被设置为localhost,端口也同样被设置为8081。下面是main函数

中的日志部分
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命令调用中搞砸了什么。在我看来,它忽略了输入,并使用每个属性的默认值。

问题来自于使用PowerShell。虽然你的ant命令可以在命令提示符中工作,但它不能像在PowerShell中那样工作。在PowerShell中,如果参数名称中有一个句点("."),PowerShell将把它读取为其他内容(可能是另一个ant命令)。相反,试着这样做:

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

相关内容

  • 没有找到相关文章

最新更新