1

次の Ant ターゲットがあります。

<target name="getArchiverStatus" depends="exportContent">
<java classname="com.test.cms.build.GetErrorCountForArchiver"  failonerror="true">
<classpath>
<pathelement location="${cs.home}/${env}/main/main.jar" /> 
<fileset dir="${cs.home}/${env}/lib" includes="*.jar" />
</classpath>
<arg value="${cs.url}" />
<arg value="${cs.username}" />
<arg value="${cs.password}" />
<arg value="${ucm.archive.name}" />
<arg value="${ucm.workflow.logs.dir}" />
</java>
</target>

Java クラス GetErrorCountForArchiver が Exception.Even をスローしたときに、この特定のターゲットがビルド ファイルのさらなる実行の終了に失敗する必要があります。Failonerror= true を使用した後でも、次のターゲットが実行されています...

4

1 に答える 1

2

fork=truefailonerror=trueを必ず使用してください。私は同じ問題に直面していましたが、これらの 2 つのプロパティを設定した後、思い通りに動作するようになりました。

簡単な授業がありました

package jonathanmv.tests;
public class ContinuousIntegration {
    public static void main(String[] args) throws Exception {
        throw new Exception("This is supposed to happen");
    }
}

次に、単純な ant ビルド ファイル

<project name="Continuous Integration Build" basedir="." default="main">

    <property name="package" value="jonathanmv.tests" />
    <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="jar.file" value="${jar.dir}/${package}.jar" />
    <property name="lib.dir" value="lib" />

    <property name="main-class" value="${package}.ContinuousIntegration" />

    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar" />
    </path>
    <path id="application" location="${jar.file}" />

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

    <target name="compile">
        <mkdir dir="${classes.dir}" />
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" includeantruntime="false" />
        <copy todir="${classes.dir}">
            <fileset dir="${src.dir}" excludes="**/*.java"/>
        </copy>
    </target>

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

    <target name="run" depends="jar">
        <java fork="true" classname="${main-class}" failonerror="true">
            <classpath>
                <path refid="classpath" />
                <path refid="application"/>
            </classpath>
        </java>
    </target>

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

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

</project>

main クラスによってスローされた例外が原因でrunターゲットが失敗するため、 clean-buildmainは実行されません。次の行は、実行ターゲットでトリックを行うものであることに注意してください

<!-- ... -->
<java fork="true" classname="${main-class}" failonerror="true">
<!-- ... -->

ant を実行すると、これが得られます

ビルドファイル: /home/team/workspace/CI/trunk/build.xml

clean: [delete] ディレクトリを削除中 /home/team/workspace/CI/trunk/build

compile: [mkdir] 作成したディレクトリ: /home/team/workspace/CI/trunk/build/classes [javac] 2 つのソース ファイルを /home/team/workspace/CI/trunk/build/classes にコンパイル [copy] 1 つのファイルをコピー/home/team/workspace/CI/trunk/build/classes へ

jar: [mkdir] 作成したディレクトリ: /home/team/workspace/CI/trunk/build/jar [jar] jar を構築: /home/team/workspace/CI/trunk/build/jar/jonathanmv.tests.jar

実行: [Java] 継続的統合は [java] 0 [main] を実行しましたjonathanmv.tests.ContinuousIntegration.main(不明なソース)

ビルドに失敗しました /home/team/workspace/CI/trunk/build.xml:41: Java が返されました: 1

合計時間: 1 秒

于 2013-08-01T16:26:58.493 に答える