无法构建NetBeans/Ant项目

4

我继承了一个使用Ant构建的NetBeans项目。我是Eclipse用户,虽然也用过Ant,但不完全理解NetBeans中使用Ant的特定方式。我知道它使用一个build-impl.xml文件(导入到build.xml中),但不知道IDE如何生成/更新该文件。

我对几个类进行了一些小的更改,并希望构建一个jar包。我尝试从build.xmlbuild-impl.xml中在Eclipse中运行"clean""jar"目标,但出现以下错误:

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.

这个目标中的 j2seproject3 元素位于第 661 行:

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

这个目标的javac行是第337行:

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

我不知道这两个目标是什么,也不知道它们为什么会失败。我下载了 NetBeans7,希望在那里构建它会成功,但是出现了相同的错误。

我可以安全地从我的构建中删除这些目标吗?我需要更新 project.properties 文件吗?

任何帮助使其构建成功都将不胜感激。


如果您撤销了小的更改,构建是否正常工作?错误信息表明编译存在问题,因此与更改相关。 - martin clayton
3个回答

2

还有其他的错误吗?之后出现了什么信息?是一堆Java编译错误,还是任务本身没有执行?

正在定义一个名为的新宏,将代替原始的。"等一下!",你会说,已经有一个任务了吧?

是的,已经有一个,看起来像是重新定义了它。通常情况下,我认为这是一件不好的事情-特别是因为它不使用与相同的参数。为什么不叫做或其他名称呢?

@符号类似于属性。它们是传递给宏的参数。

你有以下内容:

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

这将调用宏来运行ORIGINAL <javac>任务进行编译。请确保下面列出的所有属性都已定义。
<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/>


嗨,是的,还有一些其他错误。问题似乎与Java 5与6之间的不兼容有关。在子类中的某些方法已被注释为“@Override”,但它们并没有被重写。这在编译Java 6时不会引起问题,但在Java 5中会引起问题。 - sdoca

0

更正:

对于之前的回答,非常抱歉。在解决Gradle构建过程中的一些问题时,发现最好创建一个新的相对布局。为了签名,需要将其插入到MainActivity.xml中,替换旧的布局,如下所示:

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

setContentView(R.layout.new_layout);


-1

关于在我的电脑上分配不同版本的Java库的问题,我也遇到了相同的问题,因为我安装了不同种类的三维建模和视觉设计软件。

通过在Windows控制面板中确认Java和管理员设置,并重新启动电脑,一切都正常了。


简短的回答虽然可以,但对于试图理解问题背后发生了什么的后来者来说并没有太多价值。请花些时间解释一下导致问题的真正原因以及如何解决。谢谢~ - Hearen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接