2012-10-01 46 views
0

我试图让Ant来编译我的项目,它具有以下目录结构的依赖关系:Ant的运行时类路径找不到javac的

MyProject/ 
    src/main/java/ 
     com/ 
      <The rest of my source> 
    gen/ 
     bin/ 
      main/ 
       <Where I want all Java sources compiled to> 
    lib/ 
     main/ 
      <All of my dependencies> 
    build.xml 
    build.properties 

这里是我的Ant任务:

<path id="src.main.java.path"> 
    <fileset dir="src/main/java"> 
     <include name="**.*java"/> 
    </fileset> 
</path> 

<path id="lib.main.path"> 
    <fileset dir="lib/main"> 
     <include name="**.*jar"/> 
    </fileset> 
</path> 

<target name="compile"> 
    <javac includeantruntime="true" srcdir="src/main/java" destdir="gen/bin/main"> 
     <!-- 
     Define a new classpath composed of all main Java sources and main Java dependencies, 
     and use them for this compilation. 
     --> 
     <classpath> 
      <pathelement path="src.main.java.path"/> 
      <pathelement path="lib.main.path"/> 
     </classpath> 
    </javac> 
</target> 

我应该提到build.xml位于项目根目录,并且其basedir属性设置为"."(项目根目录)。

当我运行“编译”的任务,我拿到100+编译器错误,它找不到任何我的项目依赖的(如吉斯,乔达时,XStream的,等等):

compile: 
    [javac] Compiling 53 source files to /<path-to-my-project-root>/MyProject/gen/bin/main 
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/Widget.java:37: package com.google.inject does not exist 
    [javac] import com.google.inject.AbstractModule; 
    [javac]      ^
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/MyWidget.java:45: cannot find symbol 
    [javac] symbol: class AbstractModule 
    [javac] public class AppUziContext extends AbstractModule { 
    [javac]    

BUILD FAILED 
/<path-to-my-project>/MyProject/build.xml:51: Compile failed; see the compiler error output for details. 

...这个列表有100多个错误,看起来像这样,但对于找不到的每个依赖项都是不同的。

我相信问题在于我配置的路径中的某处,并且在javac/classpath之内引用,但是在阅读Ant文档后,我无法弄清楚我要去哪里。提前致谢!

回答

3

在你的目标试试这个:

<classpath> 
    <path refid="src.main.java.path"/> 
    <path refid="lib.main.path"/> 
</classpath> 

我通常做完整的类路径的目标,然后使用一个班轮类路径的目标之内:在目标

<path id="target.class.path"> 
    <path refid="src.main.java.path"/> 
    <path refid="lib.main.path"/> 
</path> 

然后:

<classpath refid="target.class.path"/> 

pathelement没有很好的记录,this是最好的,你会从蚂蚁的网站。请注意,在这些示例中,<pathelement path=始终与属性一起使用,否则它将采用实际的文件夹名称(也可能是属性)<pathelement location

+0

谢谢@ pb2q(+1) - 但那不是。我确实尝试了你的建议,只是为了排除它,但仍然得到了同样的错误(确切地说)。如果你注意到,我没有设置'src.main.java.path'或'lib.main.path'作为属性,我将它们定义在编译目标之上并给它们赋予这些标签。其他事情正在发生。再次感谢! – IAmYourFaja

相关问题