1

必要な 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. IOUtilsEclipseはjarの内容にそれを表示するため、私が持っているjarのバージョンにはクラスがあると確信しています。
4

1 に答える 1

4

最も可能性の高い説明は、クラスを含む jar がクラスパスにないことです。

このクラスを含まない「commons-io-1.3.1」という名前の jar があった場合に備えて、Maven Central を再確認しましたが、残念ながらありません。

したがって、jar が実際にクラスパス上にあることを確認できるように、次の診断ターゲットをビルドに追加することをお勧めします。

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

    <echo>Classpath is ${classpathProp}</echo>
</target>
于 2013-01-18T21:29:47.787 に答える