简体   繁体   中英

Can't Build NetBeans/Ant Project

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.

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

corrected:

sorry about the past answer. solving some on the Gradle build on the line found that is advisable to create a new Relative layout. To sign it need to insert it into MainActivity.xml by replacing the old layout like

com.android.support: appcompat v7:28.0.0-alpha1';

setContentView (R.layout.new_layout);

I had the same issue about assigning different versions of the Java library on my computer, because I have different kinds of software on 3d modelling and visual design.

By affirming Java and administrator settings on Windows Control Panel, and resetting my computer, everything was ok.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM