Javac错误:“错误:发现警告并指定-Werror”,在ant中禁用“-Werror”

5
这是一个安卓项目,当运行 javac 程序时,我的 ant 构建脚本有时会将警告视为错误导致失败。严重的是,它只有有时才会这样做,这可能是我要问的另一个问题。它会打印错误并突然取消构建。
[javac] 1 error

[javac] 9 warnings

随着我深入研究,我发现这个“错误”是什么了。
error: warnings found and -Werror specified

这不是我明确设置的。现在可能是在build.xml文件中深埋的一个参数,或者可能是在这个特定子库的build.xml文件中,在我目前不知道的某个特定条件下。

有时候是由安卓Facebook SDK引起的。但在ant build.xml文件中并没有Werror参数,但是我想禁用它或绕过它。

这是为了一个构建服务器,我还有其他条件来阻止构建。不一致的ant和javac问题实际上没有什么好处。

但对此的任何见解都会受到赞赏。


你能分享一下调用 <javac> 的任务吗?我希望看到类似这样的东西 <compilerarg value="-Werror"/>,但我相信这不是情况...也许 compilerarg 是在属性文件中定义的属性?在你调用的 build.xml 中是否包含任何 ant 文件? - thekbb
1个回答

2
我的Android SDK目录下的"tools/ant/build.xml"文件包含以下内容:
<property name="java.compilerargs" value="" />

也许导致编译失败的Android SDK包含了“-Werror”编译器参数,将警告视为错误?(如果不是这样的话,在有问题的Android SDK实例目录中进行“compilerargs”的递归grep操作可能会找到罪魁祸首。)
更新:
另一方面,在我的Android SDK中,该属性本身并非强制性的——它只是在这里被使用了。
<!-- Compiles this project's .java files into .class files. -->
<target name="-compile" depends="-pre-build, -build-setup, -code-gen, -pre-compile">
    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
        <!-- merge the project's own classpath and the tested project's classpath -->
        <path id="project.javac.classpath">
            <path refid="project.all.jars.path" />
            <path refid="tested.project.classpath" />
            <path path="${java.compiler.classpath}" />
        </path>
        <javac encoding="${java.encoding}"
                source="${java.source}" target="${java.target}"
                debug="true" extdirs="" includeantruntime="false"
                destdir="${out.classes.absolute.dir}"
                bootclasspathref="project.target.class.path"
                verbose="${verbose}"
                classpathref="project.javac.classpath"
                fork="${need.javac.fork}">
            <src path="${source.absolute.dir}" />
            <src path="${gen.absolute.dir}" />
            <compilerarg line="${java.compilerargs}" />
        </javac>

必须存在的元素是倒数第二行的“compilerarg”元素,因此对“compilerargs”的搜索应该改为搜索“compilerarg”,这是更好的选择。


好的,我的目标SDK是Android 4.2.2。你能看一下吗?但也许我的一个库项目正在使用不同的Android SDK,嗯…… - CQM
如果您使用多个Android SDK进行构建(例如在不同的计算机上构建或使用多个SDK版本),那么可能只有其中一个SDK存在问题。如果您可以根据构建失败的情况确定哪个SDK存在问题,那么您可以对该特定SDK进行“compilerargs”的grep搜索,否则您可能需要在用于构建的所有计算机上对所有SDK进行grep搜索。我认为您无法在没有文件内容搜索的情况下找到问题的源头,或者至少比使用文件内容搜索更容易找到。 - user589555
我认为这是安卓4.2.2版本,我想使用它。 - CQM
我从它的文件夹中运行了这个命令 android-17 user$ grep -rl 'compilerargs' .,但是没有找到,它在那里看不到。 - CQM
我建议您运行与“compilerargs”不同的“compilerarg”的相同命令。更确切地说:grep -rl compilerarg . 如果失败了,那么我会执行 grep -rl Werror . 因为-Werror必须来自某个地方。 - user589555
显示剩余5条评论

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