【问题标题】:Java, main command line arguments and Ant build file [duplicate]Java,主要命令行参数和 Ant 构建文件 [重复]
【发布时间】:2012-12-21 14:21:18
【问题描述】:

可能重复:
Use Ant for running program with command line arguments

我编写了一个 java 程序,它将几个文件名作为命令行参数(输入到 main.xml 的 String[] args 数组中)。 现在我需要编写一个 Ant 构建文件。 如何执行此命令:

ant run SampleFile1.txt SampleFile2.txt ...

获取这些参数并将它们传递给我的 main?

这是我的示例 Ant 文件:

<?xml version="1.0" ?>
<project name="MyProgram" default="main">

<property name="src.dir"     value="src"/>

<property name="build.dir"   value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir"     value="${build.dir}/jar"/>

<property name="main-class"  value="MyProgram.MainClass"/>

<target name="clean">
    <delete dir="${build.dir}"/>
 </target>

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>

   <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>

            </manifest>

        </jar>
    </target>

    <target name="run" depends="jar">
        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
//now when I run it here, I want it to get the arguments I input when I do ant run. for example: ant run file1.txt, file2.txt <- I want those to go to my String[] args of the main 
        </java>
    </target>

    <target name="clean-build" depends="clean,jar"/>

    <target name="main" depends="clean,run"/>

【问题讨论】:

  • 这对我不起作用,它给了我错误 Target "File.txt" does not exist in the project "SampleProj".
  • 你执行的命令是什么?
  • java MyProgram file1.txt file2.txt
  • 你还有一个名为build.xml的文件吗?你能把那个贴出来。默认情况下,runnint ant 在这个文件中执行构建系统。如果不知道该文件是什么样子,我们将无法帮助您。
  • @DavidW。我将其添加到问题中。

标签: java ant


【解决方案1】:

&lt;java&gt; 任务有一点变化:

<target name="run" depends="jar">
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
        <arg value="${file1}"/>
        <arg value="${file2}"/>
    </java>
</target>

现在,您有两个新参数:file1file2 您可以像这样从命令行传递它们:

$ ant -Dfile1=foo.txt-Dfile2=bar.txt run

Ant 获取一个目标列表,而您正在执行目标run-D 参数是您传递给程序的属性。

我建议您将默认参数像这样放在程序中:

<target name="run" depends="jar">
    <property name="file1" value="bar.txt"/>
    <property name="file2" value="foo.txt"/>
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
        <args value="${file1}"/>
        <args value="${file2}"/>
    </java>
</target>

这样,如果您不传递任何参数,它将使用您的默认参数foo.txtbar.txt。请记住,在命令行上使用-D 参数设置的属性会覆盖在build.xml 文件本身中设置的那些属性的值。属性一经设置,就永远无法更改。

【讨论】:

  • 在我的作业中,我必须像这样运行文件:“ant run File1.txt File2.txt” 那么有没有办法让它在没有-D参数的情况下运行?
  • Ant 命令中使用的所有非参数化参数都是目标。可能会做一些诡计来让 Ant 做你想做的事。 Ant 命令行可以在 ${sun.java.command} 属性中找到。有可能从那里拉出目标。 Ant 在查看任务之前运行非目标任务,因此可以将您的 &lt;java&gt; 任务放在任何目标之外,然后解析命令行,拉出您的其他参数,执行 &lt;java&gt; 任务,然后忽略未找到目标消息。最好写一个小的 shell 脚本来为你做这件事。
猜你喜欢
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多