2013-02-11 3 views
1

У меня есть Ant сборка, которая компилирует мои основные классов правильно, но не суметь, когда он идет к компиляции моих тестовым классов, потому что он не может найти символы для любого из моих основных классов: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 не может найти мой основной код. Заранее спасибо.

+0

Путь к классам для компиляции-тест должен включать в себя классы, порожденные компиляции магистрали, Я предлагаю. – Aubin

ответ

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> 
Смежные вопросы