сбой файла сборки ANT, если Java-программа, на которую она ссылается, выдает исключение - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть следующая цель 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следующая цель выполняется ...

1 Ответ

2 голосов
/ 01 августа 2013

Убедитесь, что вы используете fork = true и failonerror = true .Я столкнулся с той же проблемой, но после того, как эти два свойства были установлены, я заработал, как хотел.

У меня был простой класс

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

Затем простой файл сборки муравья

<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>

clean-build и main не запускаются, поскольку цель run завершается неудачно из-за исключения, выданного основным классом.Обратите внимание, что следующая строка выполняет трюк в run target

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

Когда я выполняю ant, это то, что я получаю

Buildfile: /home/team/workspace/CI/trunk/build.xml

clean: [удалить] Удаление каталога / 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 /команда / рабочее пространство / CI / багажник / сборка / классы

jar: [mkdir] Созданный каталог: / home / team / рабочая область / CI / багажник / сборка / jar [jar] Building jar: / home / team /рабочая область / CI / trunk / build / jar / jonathanmv.tests.jar

run: [java] Непрерывная интеграция run [java] 0 [главная] ИНФОРМАЦИЯ jonathanmv.tests.ContinuousIntegration - Непрерывная интеграция> run [java]Исключение в потоке "main" java.lang.Exception: это должно произойти [java] в jonathanmv.tests.ContinuousIntegration.main (неизвестный источник)

BUILD FAILED /home/team/workspace/CI/trunk/build.xml:41: Java вернуло: 1

Общее время: 1 секунда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...