Ant构建失败,没有可见错误

时间:2010-08-03 23:51:59

标签: java ant javac

编辑:我最终在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标志添加到ant会创建大量信息,并且使用如此长的类路径(如此多的罐子),很难对其进行排序。

这是蚂蚁的目标:

  <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 个答案:

答案 0 :(得分:1)

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>

答案 1 :(得分:1)

您可以在调试模式下运行ant build,以便逐步完成吗?在build.xml中设置断点。然后右键单击build.xml并选择Debug As - &gt; Ant Build(假设您使用的是Eclipse)。这可能有助于您找出问题所在。

HTH。