2

プログラムでリターンコードを取得する際に問題が発生しました...次のファイル。(いくつかの会社固有のものを切り取った)。2つのファイルを取得しました。1つはjava-taskを含む一般的なファイルで、もう1つはsimeプロパティとant-taskを定義する特定のファイルです。

実行中のjava-testでbuild.rcを取得するにはどうすればよいですか?ファイルの最後にあるエコーメッセージは実際のリターンコードを配信しますが、p.getProperty( "build.rc")はnullを返します。

Specific.build.xml

<project basedir="../../../.." name="run-joblauncher">
     <property name="prop1" value="valProp1" />
     <ant antfile="./dev/script/general.xml" dir="${basedir}" target="RUN-MYCLASS" inheritAll="true"/>
</project>

general.xml

<project basedir="../../../.." default="RUN-MYCLASS" name="run-specifictest"> <target name="RUN-MYCLASS"> 
     <property name="returnCode" value="99"/>
     <target name="RUN-MYCLASS">            
          <java classname="my.company.class" fork="true" resultproperty="build.rc" failonerror="false">
                <arg value="${workdir}"/>
                <classpath>
                     <pathelement path="${java.class.path}"/>
                </classpath>
          </java>   
      </target> 
</project>

myJunitTest.java

public class TestAntScripts extends TestCase {

public void testMyAnt() throws IOException {

    File dir = new File("pathToSpecific.xml");

    Project p = null;
    try {
        File buildFile = new File(buildFileName);
        p = new Project();
        DefaultLogger consoleLogger = new DefaultLogger();
        consoleLogger.setErrorPrintStream(System.err);
        consoleLogger.setOutputPrintStream(System.out);
        consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
        p.addBuildListener(consoleLogger);
        p.addBuildListener(new CustomBuildListener(this));
        p.fireBuildStarted();
        p.init();
        ProjectHelper helper = ProjectHelper.getProjectHelper();
        p.addReference("ant.projectHelper", helper);
        helper.parse(p, buildFile);
        p.fireBuildFinished(null);
    } catch (BuildException e) {
        p.fireBuildFinished(e);
        e.printStackTrace();
        System.err.println("AntRunner for buildfile " + buildFileName
                + " failed with Exception ");
    }

    String rc = p.getProperty("returnCode");
    assertEquals(0, Integer.parseInt(rc));

    }


public void taskFinished(String buildRc) {
    assertEquals(0, buildRc);   
    }
}

編集:

すでに定義されているプロパティに値を割り当てる方法はどのようになっていますか?java-targetの外部でvarreturnCodeを定義し、<var name="returnCode" value="${build.rc}"/>ターゲットの内部のように値を割り当てようとします。実行されていません。

EDIT2 : カスタムBuildListenerを追加し、そこにbuild.rcを取得します。

  @Override
  public void targetFinished(BuildEvent event) {

    if (event.getTarget().getName().trim().equalsIgnoreCase("RUN-MYCLASS")) {
        String buildRc = event.getTarget().getProject().getProperty("build.rc");    
        tester.taskFinished(buildRc, jobname);
    }

テスターは私のJUnit-Testであり、コンストラクターで設定されます。

4

2 に答える 2

1

カスタムBuildListenerを追加し、そこにbuild.rcを取得しました。

@Override
public void targetFinished(BuildEvent event) {

if (event.getTarget().getName().trim().equalsIgnoreCase("RUN-MYCLASS")) {
    String buildRc = event.getTarget().getProject().getProperty("build.rc");    
    tester.setReturnCode(buildRc);
}

そして、次のようにテストします

assertEquals(0, Integer.parseInt(this.returnCode));
于 2012-08-03T08:04:46.007 に答える
0

The ant manual mentions that

Property scopes exist at Apache Ant's various "block" levels. These include targets as well as the Parallel and Sequential task containers (including Macrodef bodies).

Pretty sure that build.rc is local and only valid in the target scope. So we can't access it after the target has been executed.

Try to define a global property (with the <property> element) and assign the result code from the java task to that property.

于 2012-08-02T13:28:16.187 に答える