Can't Build NetBeans/Ant Project

12,330

Any other errors? What message appeared after that? Was it a bunch of Java compile errors, or did the <javac> task itself didn't execute?

The <macrodef> is defining a new macro named <javac> that will execute instead of the original <javac>. "Wait a second!", you're saying, isn't there already a <javac> task?

Yes there is, and this looks like it's redefining it. I would normally consider this a bad thing to do -- especially since it doesn't take the same arguments of <javac>. Why not call it <netbeansc> or something?

The @ signs are sort of like properties. They're parameters that you're passing to the macro.

You have the following:

<j2seproject3:javac
    gensrcdir="${build.generated.sources.dir}"/>

This calls the Macro that pretty much runs the ORIGINAL <javac> task to do the compile. I would make sure that all of the properties show below are defined.

<javac
    debug="${javac.debug}"
    deprecation="${javac.deprecation}"
    destdir="${build.classes.dir}"
    encoding="${source.encoding}"
    excludes="${excludes}"
    executable="${platform.javac}"
    fork="yes"
    includeantruntime="false"
    includes="${includes}"
    source="${javac.source}"
    sourcepath="${empty.dir}"
    srcdir="${srcdir}"
    target="${javac.target}"
    tempdir="${java.io.tmpdir}">
    <src>
       <dirset dir="${empty.dir}"
            erroronmissingdir="false">
            <include name="*"/>
       </dirset>
   </src>
   <classpath>
       <path path="${javac.classpath"/>
   </classpath>
   <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
   <compilerarg line="${javac.compilerargs}"/>
   <customize/>

Share:
12,330
sdoca
Author by

sdoca

Updated on June 04, 2022

Comments

  • sdoca
    sdoca almost 2 years

    I have inherited a project originally written in NetBeans using Ant to build. I am an Eclipse user and have used Ant but do not completely understand the NetBeans specific way of using Ant. I know it uses a build-impl.xml file (imported into the build.xml), but am at a loss as to how that file is generated/updated by the IDE.

    I made some minor changes to a couple of classes and want to build a jar. I tried running the "clean" and "jar" targets in Eclipse from both the build.xml and build-impl.xml but get the following errors:

    BUILD FAILED
    C:\Devel\Projects\MyProject\nbproject\build-impl.xml:661: The following error occurred while executing this line:
    C:\Devel\Projects\MyProject\nbproject\build-impl.xml:337: Compile failed; see the compiler error output for details.
    

    Line 661 is the j2seproject3 element in this target:

    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
        <copy todir="${build.classes.dir}">
            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
        </copy>
    </target>
    

    Line 337 is the javac line from this target:

    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
            <attribute default="${src.dir}" name="srcdir"/>
            <attribute default="${build.classes.dir}" name="destdir"/>
            <attribute default="${javac.classpath}" name="classpath"/>
            <attribute default="${javac.processorpath}" name="processorpath"/>
            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
            <attribute default="${includes}" name="includes"/>
            <attribute default="${excludes}" name="excludes"/>
            <attribute default="${javac.debug}" name="debug"/>
            <attribute default="${empty.dir}" name="sourcepath"/>
            <attribute default="${empty.dir}" name="gensrcdir"/>
            <element name="customize" optional="true"/>
            <sequential>
                <property location="${build.dir}/empty" name="empty.dir"/>
                <mkdir dir="${empty.dir}"/>
                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                    <src>
                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                            <include name="*"/>
                        </dirset>
                    </src>
                    <classpath>
                        <path path="@{classpath}"/>
                    </classpath>
                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
                    <compilerarg line="${javac.compilerargs}"/>
                    <customize/>
                </javac>
            </sequential>
        </macrodef>
    </target>
    

    I have no idea what these two targets are about and why they're failing. I downloaded NetBeans7 hoping that building it there would succeed, but get the same errors.

    Can I safely remove these targets from my build? Do I need to update the project.properties file?

    Any help getting this to build is appreciated.

  • sdoca
    sdoca almost 13 years
    Hi, yes there were some other errors. The issue appears to be related to a Java 5 versus 6 incompatibility. Some of the methods in a sub-class had been annotated with "@Override" when they weren't overridden methods. This didn't cause issues when compiling for Java 6 but did for Java 5.
  • Hearen
    Hearen almost 6 years
    A short answer is welcome, however it won't provide much value to the latter users who are trying to understand what's going on behind the problem. Please spare some time to explain what's the real issue to cause the problem and how to solve. Thank you ~