Ant javac classpathref不工作?

时间:2013-01-18 19:32:40

标签: ant classpath javac apache-commons-io

尽管所需的jar文件位于类路径上,但javac目标中的compile任务仍然失败。谁能帮我弄清楚为什么会这样?

导致以下错误,因为无法识别IOUtils.lineIterator()。但是, commons-io-1.3.1.jar 位于构建路径上(${app.lib.dir}中)。所以,构建失败很奇怪。

<target name="compile">
    <mkdir dir="${classes.dir}" />
    <javac destdir="${classes.dir}" debug="true" classpathref="dependency.path"
        excludes="/../security/**" >
        <src path="${java.src.dir}" />
    </javac>
</target>

<path id="dependency.path">
    <fileset dir="${spring.lib.dir}" includes="*.jar" />
    <fileset dir="${spring.depends.dir}" includes="**/*.jar" />
    <fileset dir="${app.lib.dir}" includes="*.jar" />
    <fileset dir="${tomcat.dir}/.." includes="**/*.jar" />
</path>

执行

ant -f build-dev.xml compile

Buildfile: C:\..\build-dev.xml compile:
    [mkdir] Created dir: C:\..\classes
    [javac] Compiling 348 source files to C:\..\classes
    [javac] C:\..\UploadUtil.java:132: cannot find symbol
    [javac] symbol  : method lineIterator(java.io.InputStream,java.lang.String)
    [javac] location: class org.apache.commons.io.IOUtils
    [javac]             Iterator<String> it = IOUtils.lineIterator(is, charSet);
    [javac]                                          ^
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 1 error

BUILD FAILED
C:\..\build-dev.xml:54: Compile failed; see the compiler error output for details.

Total time: 11 seconds

尝试了方法

    令人惊讶的是,
  1. Eclipse 正在构建项目而没有任何问题。我在项目构建路径上有相同的jar集。我也有从编译中排除的相同源目录。
  2. 尝试在源文件夹中使用 javac 可执行文件,但不确定如何在源代码目录结构上使用javac。
  3. 我确定我所拥有的jar版本有类IOUtils,因为Eclipse在jar的内容中显示它。

1 个答案:

答案 0 :(得分:4)

最可能的解释是包含类的jar不在类路径中。

我仔细检查了Maven Central,以防万一有一个名为“commons-io-1.3.1”的jar不包含这个类,但遗憾的是没有:

所以我建议您在构建中添加以下诊断目标,以便确认jar实际上在类路径中:

<target name="diagnostics">
    <pathconvert property="classpathProp" refid="dependency.path"/>

    <echo>Classpath is ${classpathProp}</echo>
</target>