使用Ant编译时“找不到符号”

时间:2010-10-13 11:07:53

标签: java android ant build-automation compilation

我需要使用Ant脚本生成apk文件,但是我遇到了编译目标的问题。为了自动生成Ant脚本,我使用了带有android update project命令的Android工具。问题是这个项目依赖于另一个项目,所以我需要使用自定义编译任务。

出于这个原因,我已经覆盖了该目标:我已经从ant_rules_r3.xml复制了已编译的任务,并且我已经更改了javac这样的任务(请参阅我更改的评论):

<!--I've changed the target 1.5 to target 1.6 -->
<javac encoding="UTF8" target="1.6" debug="true" extdirs=""
      destdir="${out.classes.absolute.dir}"
      bootclasspathref="android.target.classpath"
      verbose="${verbose}"
      classpath="${extensible.classpath}"
      classpathref="android.libraries.jars">
    <src path="${source.absolute.dir}" />
    <!--My project has two src directories -->
    <src path="${source2.absolute.dir}" />
    <src path="${gen.absolute.dir}" />
    <src refid="android.libraries.src" />
    <!--I've added here the src dir of the other project -->    
    <src path="${dep1.source.absolute.dir}"/>
    <classpath>
        <!--I've added here the lib dir of the other project -->
        <fileset dir="${dep1.external.libs.absolute.dir}" includes="*.jar" />
        <fileset dir="${external.libs.absolute.dir}" includes="*.jar" />
        <fileset dir="${extensible.libs.classpath}" includes="*.jar" />
    </classpath>
</javac>

问题在于,当我使用ant compile进行编译时,出现以下错误:

[javac].... cannot find symbol
[javac] symbol  : constructor IOException(java.lang.String,java.security.NoSuchAlgorithmException)
[javac] location: class java.io.IOException
[javac]             throw new IOException("Algorithm not found", e);

尽管我已经将目标属性设置为1.6,但它似乎是用JDK 1.5而不是1.6编译的。我的电脑使用的是Java版本1.6.0_20。

我尝试过使用javac compiler="javac1.6",但我收到同样的错误。

我也设置了build.properties

ant.build.javac.target=1.6
ant.build.javac.source=1.6

但它也没有解决问题。将其设置为1.3而不是1.6会导致更多错误,因此它似乎正在使用我在此处设置的JDK。

如何才能正确编译?

1 个答案:

答案 0 :(得分:2)

因为你已经指定了bootclasspath来使用Android SDK类,所以这些可能包含IOException类,它没有实现带有Throwable second arg的two-arg构造函数。这个构造函数在Java 6中是新的,但根据recent Android (2.2) docs,Android版本只有Java-1.5样式构造函数,而实现了两个带有Throwable args的新构造函数。 / p>

您没有提到在引入第二个项目之前是否已成功构建它 - 所以我建议您检查本地Android引导类以查看IOException提供的构造函数。