development

명령 행 인수로 프로그램 실행에 Ant 사용

big-blog 2021. 1. 6. 20:41
반응형

명령 행 인수로 프로그램 실행에 Ant 사용


내 프로그램이 명령 줄 인수를 받고 있습니다. Ant를 사용할 때 어떻게 통과 할 수 있습니까?


Richard Cook 의 대답을 확장합니다 .

다음은 ant모든 프로그램 (Java 프로그램을 포함하되 이에 국한되지 않음)을 실행 하는 작업입니다.

<target name="run">
   <exec executable="name-of-executable">
      <arg value="${arg0}"/>
      <arg value="${arg1}"/>
   </exec>
</target>

다음은 .jar파일 에서 Java 프로그램을 실행하는 작업입니다 .

<target name="run-java">
   <java jar="path for jar">
      <arg value="${arg0}"/>
      <arg value="${arg1}"/>
   </java>
</target>

다음과 같이 명령 줄에서 호출 할 수 있습니다.

ant -Darg0=Hello -Darg1=World run

-Darg구문 을 사용해야 합니다. 이것을 실행 한 경우 :

ant run arg0 arg1

그런 다음 ant대상 arg0arg1.


가능한 각 인수에 대해 별도의 속성을 처리하지 않으려면 다음을 사용하는 것이 좋습니다.

<arg line="${args}"/>

속성이있는 특정 대상을 사용하여 속성이 설정되지 않았는지 확인할 수 있습니다 unless.

<input message="Type the desired command line arguments:" addProperty="args"/>

모두 합치면 다음과 같은 이점이 있습니다.

<target name="run" depends="compile, input-runargs" description="run the project">
  <!-- You can use exec here, depending on your needs -->
  <java classname="Main">
    <arg line="${args}"/>
  </java>
</target>
<target name="input-runargs" unless="args" description="prompts for command line arguments if necessary">
  <input addProperty="args" message="Type the desired command line arguments:"/>
</target>

다음과 같이 사용할 수 있습니다.

ant
ant run
ant run -Dargs='--help'

처음 두 명령은 명령 줄 인수를 묻는 메시지를 표시하지만 후자는 그렇지 않습니다.


매개 변수를 빌드에 전달하는 유일한 효과적인 메커니즘은 Java 속성을 사용하는 것입니다.

ant -Done=1 -Dtwo=2

다음 예제는 예상 매개 변수가 스크립트에 전달되었는지 확인하고 확인하는 방법을 보여줍니다.

<project name="check" default="build">

    <condition property="params.set">
        <and>
            <isset property="one"/>
            <isset property="two"/>
        </and>
    </condition>

    <target name="check">
        <fail unless="params.set">
        Must specify the parameters: one, two
        </fail>
    </target>

    <target name="build" depends="check">
        <echo>
        one = ${one}
        two = ${two}
        </echo>
    </target>

</project>

무엇을하려고하는지, 어떻게하려고하는지 좀 더 구체적으로 말씀해 주시겠습니까?

<exec>작업을 사용하여 프로그램을 호출하려는 경우 다음을 수행 할 수 있습니다.

<exec executable="name-of-executable">
  <arg value="arg0"/>
  <arg value="arg1"/>
</exec>

결국 내가 한 일은 배치 파일을 만들어 개미 파일에서 CLASSPATH를 추출한 다음 다음을 사용하여 Java를 직접 실행하는 것입니다.

내 build.xml에서 :

<target name="printclasspath">
    <pathconvert property="classpathProp" refid="project.class.path"/>
    <echo>${classpathProp}</echo>
</target>

'run.sh'라는 다른 스크립트에서 :

export CLASSPATH=$(ant -q printclasspath | grep echo | cut -d \  -f 7):build
java "$@"

It's no longer cross-platform, but at least it's relatively easy to use, and one could provide a .bat file that does the same as the run.sh. It's a very short batch script. It's not like migrating the entire build to platform-specific batch files.

I think it's a shame there's not some option in ant whereby you could do something like:

ant -- arg1 arg2 arg3

mpirun uses this type of syntax; ssh also can use this syntax I think.

ReferenceURL : https://stackoverflow.com/questions/3730880/use-ant-for-running-program-with-command-line-arguments

반응형