1

メイン クラスを正しくコンパイルしている Ant ビルドがありますが、メイン クラスのシンボルが見つからないため、テスト クラスのコンパイルに失敗します。

プロジェクトのディレクトリ構造:

MyProj/
    src/
        main/
            java/
            resources/
        test/
            java/
            resources/
    build/
        build.properties
        build.xml
    gen/
        lib/
            main/
            test/
        bin/
            main/
            test/

(これは Maven プロジェクトの構造を持っていますが、そうではありません。これは Ant ベースのビルドです。私は Maven がプロジェクトを編成する方法が好きです。)

build.properties

src.main.java.dir=src/main/java
src.test.java.dir=src/test/java
gen.dir=gen
gen.bin.dir=${gen.dir}/bin
gen.bin.main.dir=${gen.bin.dir}/main
gen.bin.test.dir=${gen.bin.dir}/test
gen.lib.dir=${gen.dir}/lib
gen.lib.main.dir=${gen.lib.dir}/main
gen.lib.test.dir=${gen.lib.dir}/test

build.xml

<project name="MyProj" default="deploy" basedir="..">
    <property environment="env" />
    <property file="build/build.properties" />

    <!-- Sourcepath for main Java source. -->
    <path id="src.main.path">
        <fileset dir="${src.main.java.dir}">
            <include name="**.*java"/>
        </fileset>
    </path>

    <!-- Sourcepath for test Java source. -->
    <path id="src.test.path">
        <fileset dir="${src.test.java.dir}">
            <include name="**.*java"/>
        </fileset>
    </path>

    <!-- Path for main Java dependencies. -->
    <path id="lib.main.path">
        <fileset dir="${gen.lib.main.dir}">
            <include name="**.*jar"/>
        </fileset>
    </path>

    <!-- Path for test Java dependencies. -->
    <path id="lib.test.path">
        <fileset dir="${gen.lib.test.dir}">
            <include name="**.*jar"/>
        </fileset>
    </path>

    <!-- Main compile path. -->
    <path id="main.compile.path">
        <path refid="src.main.path"/>
        <path refid="lib.main.path"/>
    </path>

    <!-- Test compile path. -->
    <path id="test.compile.path">
        <path refid="src.test.path"/>
        <path refid="src.main.path"/>
        <path refid="lib.test.path"/>
        <path refid="lib.main.path"/>
    </path>

    <!-- Compile main Java sources. -->
    <target name="compile-main">
        <echo message="Compiling main sources." />
        <javac includeantruntime="false" srcdir="${src.main.java.dir}" destdir="${gen.bin.main.dir}">
            <classpath refid="main.compile.path"/>
        </javac>
    </target>

    <!-- Compile test Java sources. -->
    <target name="compile-test" depends="compile-main">
        <echo message="Compiling test sources." />
        <javac includeantruntime="false" srcdir="${src.test.java.dir}" destdir="${gen.bin.test.dir}">
            <classpath refid="test.compile.path"/>
        </javac>
    </target>
</project>

実行するcompile-mainと、BUILD SUCCESSFULメッセージが表示されます (正常にビルドされます)。しかし、実行するcompile-testと、次のような 100 以上のエラーが発生しました。

[javac] /home/myUser/sandbox/workbench/eclipse/workspace/MyProj/src/test/java/com/myproj/server/SomeTest.java:79: cannot find symbol
[javac] symbol  : variable Widget
[javac] location: class com.myproj.server.SomeTest
[javac]                 Widget.Always,
[javac]                 ^
[javac] 100 errors

BUILD FAILED
/home/myUser/sandbox/workbench/eclipse/workspace/MyProj/build/build-local.xml:163: Compile failed; see the compiler error output for details.

Widgetはメイン クラス (列挙型) であり、Always値を持ちます。

パスを確認して再確認しました。私の人生ではtest.compile.path、メインコードが見つからない理由がわかりません。前もって感謝します。

4

1 に答える 1

0

問題はtest.compile.path、生成されたクラスが移動するターゲット ディレクトリではなく、メイン クラスのソース ディレクトリを参照することです。

javac生成されたクラスを含めるようにテスト コンパイルのタスクを変更すると、次のように動作するはずです。

    <javac includeantruntime="false" srcdir="${src.test.java.dir}" destdir="${gen.bin.test.dir}">
        <classpath refid="test.compile.path"/>
        <classpath location="${gen.bin.main.dir}" />
    </javac>
于 2013-02-11T21:26:47.477 に答える