Сборка Ant завершается неудачно без видимых ошибок - PullRequest
3 голосов
/ 04 августа 2010

РЕДАКТИРОВАТЬ: я закончил настройку всего проекта в Eclipse и смог его собрать. Я не уверен, почему возникла эта проблема, и надеюсь, мне никогда не придется выяснять.

У меня проблема с тем, что моя сборка сообщает "BUILD FAILED" без сообщения об ошибках.

Я создаю большое приложение с большим количеством старого кода, который я теперь рад изменить. Большинство других разработчиков настроили свои сборки с Eclipse, но я пытаюсь собрать его с помощью существующих файлов build.xml.

После получения моего набора путей к классам сборка проходит гладко, но вскоре после начала этапа компиляции возвращается:

Lots of "[javac] file.java" lines.

BUILD FAILED
<project path>/build.xml:201: Compile failed; see the compiler error output for details.

Это менее чем полезно. В build.log нет никакой дополнительной информации, кроме трассировки стека:

at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1085)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:885)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

Добавление флага -debug к муравью создает горы информации, и при таком длинном пути к классам (так много банок) его трудно разобрать.

Вот цель в муравье:

  <target name="compile" depends="achmetadata">
    <mkdir dir="${path.build.classes}"/>
    <javac
      listfiles="yes"
      destdir="${path.build.classes}"
      classpathref="project.classpath"
      debug="on"
      deprecation="on"
      fork="yes"
      nowarn="no"
      memoryMaximumSize="512M"
      srcdir="${path.src.java}"
      source="1.4"
      target="1.4"
      >
    -><src path="${path.build.src}"/>
      <patternset refid="production-code"/>
    </javac>
  </target>

Путь к классам устанавливается через этот classpathref и содержит множество jar-файлов и тегов.

Любые мысли о том, что я должен искать? Что может привести к тому, что муравей потерпит неудачу?

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Можете ли вы запустить сборку муравья в режиме отладки, чтобы пройти через него? Установите точку останова в вашем build.xml. Затем щелкните правой кнопкой мыши файл build.xml и выберите «Отладка как» -> «Сборка муравья» (при условии, что вы используете Eclipse). Это может помочь вам выяснить вашу проблему.

НТН.

1 голос
/ 04 августа 2010

CLASSPATH должен быть установлен внутри самого build.xml.Если вы зависите от переменной среды CLASSPATH, вы делаете ошибку.

Проверьте, работает ли этот build.xml лучше.Изучите структуру каталогов и сделайте так, чтобы они соответствовали изложенному в build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="xslt-converter" basedir="." default="package">

    <property name="version" value="1.6"/>
    <property name="haltonfailure" value="no"/>

    <property name="out" value="out"/>

    <property name="production.src" value="src"/>
    <property name="production.lib" value="lib"/>
    <property name="production.resources" value="config"/>
    <property name="production.classes" value="${out}/production/${ant.project.name}"/>

    <property name="test.src" value="test"/>
    <property name="test.lib" value="lib"/>
    <property name="test.resources" value="config"/>
    <property name="test.classes" value="${out}/test/${ant.project.name}"/>

    <property name="exploded" value="out/exploded/${ant.project.name}"/>
    <property name="exploded.classes" value="${exploded}/WEB-INF/classes"/>
    <property name="exploded.lib" value="${exploded}/WEB-INF/lib"/>

    <path id="production.class.path">
        <pathelement location="${production.classes}"/>
        <pathelement location="${production.resources}"/>
        <fileset dir="${production.lib}">
            <include name="**/*.jar"/>
            <exclude name="**/junit*.jar"/>
            <exclude name="**/*test*.jar"/>
        </fileset>
    </path>

    <path id="test.class.path">                            
        <path refid="production.class.path"/>
        <pathelement location="${test.classes}"/>
        <pathelement location="${test.resources}"/>
        <fileset dir="${test.lib}">
            <include name="**/junit*.jar"/>
            <include name="**/*test*.jar"/>
        </fileset>
    </path>

    <path id="testng.class.path">
        <fileset dir="${test.lib}">
            <include name="**/testng*.jar"/>
        </fileset>
    </path>

    <available file="${out}" property="outputExists"/>

    <target name="clean" description="remove all generated artifacts" if="outputExists">
        <delete dir="${out}" includeEmptyDirs="true"/>
        <delete dir="${reports.out}" includeEmptyDirs="true"/>
    </target>

    <target name="create" description="create the output directories" unless="outputExists">
        <mkdir dir="${production.classes}"/>
        <mkdir dir="${test.classes}"/>
        <mkdir dir="${reports.out}"/>
        <mkdir dir="${junit.out}"/>
        <mkdir dir="${testng.out}"/>
        <mkdir dir="${exploded.classes}"/>
        <mkdir dir="${exploded.lib}"/>
    </target>

    <target name="compile" description="compile all .java source files" depends="create">
        <!-- Debug output
                <property name="production.class.path" refid="production.class.path"/>
                <echo message="${production.class.path}"/>
        -->
        <javac srcdir="src" destdir="${out}/production/${ant.project.name}" debug="on" source="${version}">
            <classpath refid="production.class.path"/>
            <include name="**/*.java"/>
            <exclude name="**/*Test.java"/>
        </javac>
        <javac srcdir="${test.src}" destdir="${out}/test/${ant.project.name}" debug="on" source="${version}">
            <classpath refid="test.class.path"/>
            <include name="**/*Test.java"/>
        </javac>
    </target>

</project>
...