myProject
   │---Folder BO --┬a.java
   │               ├atest.java
   │               └build.xml
   │---Folder DAO -┬b.java
   │               ├btest.java
   │               └build.xml
   │---Folder DB --┬c.java
   │               ├ctest.java
   │               └build.xml
   └---build.xml(说明:a.java调用b.java,b.java调用c.java)我在每个目录下都放了个build.xml
那现在是这样,我的工程都编译完成了,我只想运行a.java但是他却调用不了b.java,请问是哪里出了问题?我的Folder BO目录下的build.xml应该怎么写?难道只能通过最外层的build.xml运行吗?不能单独运行其中一个类吗?我急呀!!在线等待!

解决方案 »

  1.   

    晕,你怎么能这么做呢
    ant的意思就是编译这些有依赖关系的文件,你应该在根目录里面写一个build.xml
    然后执行ant就能编译整个工程
      

  2.   

    对,既然用ant,就应该让依赖关系理清楚,然后一次搞定了啊。
      

  3.   

    呵呵~,很简单就能搞定啊,弄那么多干嘛?<target name="compilesrc">
        <javac srcdir="myProject" destdir="classes" deprecation="off"/>    
      </target>
      

  4.   

    请问,有向我这样在每个文件夹下面我写个build.xml的情况吗?
    还有,如果我用最外层的build.xml直接编译了整个工程,现在我修改了a.java,能不能就直接编译a.java而不用去把其他没有改动的类都编译一边呢?
    谢谢!
      

  5.   

    enhydra shark使用了每个模块一个build.xml, 整个项目也有一个build.xml的做法, 但是也并没做到你的每个文件夹一个build.xml.你这样使用是无意义的,只需要整个项目用一个build.xml,敲下ant后大家就去喝咖啡.至于 "能不能就直接编译a.java而不用去把其他没有改动的类都编译一边呢?"
    javac本身就有这个功能.
      

  6.   

    你可以试试这种目录方式:[ant]非常简单的ant使用教程
    http://blog.csdn.net/cm4ever/archive/2005/02/28/305559.aspxhttp://java.mblogger.cn/cm4ever/posts/12480.aspx
      

  7.   

    一般都是只有一个build.xml的情况,而且楼主的项目还这么小。楼主可以在XML里写入不同的运行,默认的运行可以是执行所有的,在其他的执行里可以是只运行a,只运行b。当然他们都依赖于一个COMPILE编译,编译的时候常见的都是把项目中的程序一次性全部编译。再单独运行,或者全部运行。如果不怕麻烦,也可以每个都
    <target name="compileA">
        <javac ……………………>    
      </target>
    <target name="compileB">
        <javac ……………………>    
      </target>
    这样。
      

  8.   

    cm4ever(小P):
    那如果我使用每个模块一个build.xml的话,我的build.xml怎么写,该怎么用呢?
      

  9.   

    你可以参考enhydra shark.
    http://shark.enhydra.org但就算是这么出名的开源项目, 我使用他模块中的build.xml还是失败,后来也没打算使用.偶没有太多时间研究他.sorry
      

  10.   

    你好像回到了Unix上Makefile的时代阿,呵呵
    ant不用这样吧,如果你每个模块没有倚赖关系,可以一个模块一个build.xml
    这里,明显你有依赖管系,那就要在上层建立build.xml咯
      

  11.   

    就算是多模块要单独编译也应该只用一个builder.xml
    只是定义不同的target而已
    从没见过写那么多的
      

  12.   

    这种做法还是有用的, 如果是各模块分给各小组(1~n)人独立开发, 那么不需要同时编译其他模块的程序,只需要从一个共用的lib文件夹载入其他模块的jar文件,使用接口,尤其对于互联网的协同工作有好处.不过不知楼主有没有这种需要,仅仅是个人或只有1个小组的话,用处不大.
      

  13.   

    即使是分给不同的人,也可以使用同一个XML文件啊。不同人执行不用的TARGET就可以了。
    看楼主的结构,如果一定要写多个的话,对于a.java 和atest.java中的build.xml,它必须编译所有的,就是你的JAVAC在build.xml文件里要把所有的都编译了,因为A用到B,B用到C。所以a.class 和b.class 和c.class都要存在。简单举个例子,常规来说只需要一个XML文件,里面有个compile的TARGET来编译所有在myProject里面的JAVA文件到build文件夹里,就是把所有的CLASS文件都放到里面。
    你还分别有3个TARGET来运行atest和btest和alltest,如果只想测试A,就运行ATEST,只想测试B,就运行BTEST,如果全部测试,就运行ALLTEST。不过运行哪个,都会先运行depends里的。具体细节找本书看看,或者上ANT的网站有基本的FAQ。<target name="compile">
      <javac srcdir="${myProject}" destdir="${build}">
         <classpath refid="cp" /> 
      </javac>
    </target><target name="atest" depends="compile">
      <junit printsummary="true">
         <test name="B0.atest" /> 
         <classpath refid="cp" /> 
      </junit>
    </target>
    <target name="btest" depends="compile">
      <junit printsummary="true">
        <test name="DA0.btest" /> 
        <classpath refid="cp" /> 
      </junit>
    </target><target name="alltest" depends="atest,btest">
       <echo message="all tests pass."/>
    </target>
      

  14.   

    请问,有向我这样在每个文件夹下面我写个build.xml的情况吗?
    还有,如果我用最外层的build.xml直接编译了整个工程,现在我修改了a.java,能不能就直接编译a.java而不用去把其他没有改动的类都编译一边呢?
    谢谢!
    -----------------------------------------------------------------------------------ant能检测出那些源文件做了修改,并且只对修改过的文件重新编译
      

  15.   

    使用ant -buildfile filename