2012-08-14 3 views
6

개미 빌드는 JAVA_HOME 용 Java 1.7.0을 사용하여 실행됩니다. 이런 식으로 javac 및 다른 모든 Java 종속 대상은 기본적으로 올바른 Java를 사용합니다.다른 jvm에서 개미 작업 실행

하지만 외부 공급 업체의 1 개 ant target은 Java 1.7.0을 사용하여 지원하지 않으며 버그가 있습니다. 예를 들어 javac 또는 분기 된 junit 인 경우이 대상은 jvm을 전환하는 매개 변수를 지원하지 않습니다.

다른 jvm에서 특정 ant 대상을 실행할 수 있습니까?

+0

일부 코드 스 니펫을 제공 할 수 있습니까? –

답변

3

exec 태스크를 사용하여 해당 대상이 매개 변수로 실행되도록 정의 된 빌드 파일을 실행할 수 있습니다. JVM을 exec 호출에 전달할 수 있기 때문에 다른 JVM에서 실행 중일 수 있습니다.

속성을 설정하는 대신 통신을 위해 파일을 사용하도록 대상을 리팩토링해야합니다. 그것은 다른 JVM에있을 것이기 때문에 분명히 메모리에 의존 할 수 없다.

17

개미 콘크리트를 사용하도록 제안하려면 다음 예는 exec 태스크를 매크로로 랩핑하여 다양한 JVM으로 대상을 호출하는 것을 단순화합니다. JVM은 Ant 환경 변수 JAVACMD을 사용하여 설정됩니다.

예 프로젝트

<?xml version="1.0" encoding="UTF-8"?> 
<project name="run-target-with-specified-java-version" default="test"> 

    <macrodef name="exec-target"> 
    <attribute name="antfile" default="${ant.file}" /> 
    <attribute name="target" /> 
    <attribute name="jvm" default="${java.home}/bin/java" /> 
    <sequential> 
     <exec executable="ant"> 
     <env key="JAVACMD" value="@{jvm}" /> 
     <arg line='-f "@{antfile}"' /> 
     <arg line="@{target}" /> 
     </exec> 
    </sequential> 
    </macrodef> 


    <target name="echo-java-version"> 
    <echo message="Java version: ${java.version}" /> 
    </target> 


    <target name="test"> 
    <exec-target target="echo-java-version" /> 

    <property name="java1.6" 
     location="/usr/lib/jvm/jdk1.6/bin/java" /> 
    <exec-target target="echo-java-version" jvm="${java1.6}" /> 
    </target> 
</project> 

당신은 다른 JVM (우리는 항상 그것을 할)에서 대상을 실행할 수 있습니다

test: 
    [exec] Buildfile: /home/your/project/build.xml 
    [exec] 
    [exec] echo-java-version: 
    [exec]  [echo] Java version: 1.7.0 
    [exec] 
    [exec] BUILD SUCCESSFUL 
    [exec] Total time: 0 seconds 
    [exec] Buildfile: /home/your/project/build.xml 
    [exec] 
    [exec] echo-java-version: 
    [exec]  [echo] Java version: 1.6.0 
    [exec] 
    [exec] BUILD SUCCESSFUL 
    [exec] Total time: 0 seconds 

BUILD SUCCESSFUL 
Total time: 2 seconds 
+1

Windows에서 (jdk의 경로를 변경 한 후) 위의 ant를 실행하면 "Execute failed : java.io.IOException :"ant "프로그램을 실행할 수 없습니다. CreateProcess error = 2, 시스템이 지정된 파일을 찾을 수 없습니다. ". 이를 해결하려면 ""줄을 으로 변경하십시오. – Santhanam

3

출력. 당신은 포크 사용할 필요가 :

<javac srcdir="${src}" 
     destdir="${build}" 
     fork="yes" 
    /> 

을하지만 난 당신이 알고 감지, 그래서 그대로 외부 ANT 작업을 실행하고 나머지에 대해에 (당신이 3 개 javac의 작업을 말할 수) 방법 원하는 JVM 이는 특성 파일을 설정하여 수행 할 수 있습니다. javac task

다른 컴파일러를 사용할 수 있습니다. 이것은에 의해 지정 될 수 있습니다 글로벌 build.compiler의

그래서이 속성이 3 작업에 영향을 미칠 것입니다 빌드를 통해 모든 작업에 영향을 (예를 들어 1.7)을 지정한 JVM에서 실행할 것입니다 재산, 그리고 설정 기본 JAVA_HOME을 외부 라이브러리 작업에 필요한 모든 것으로 설정할 수 있습니다.