Ant编译依赖的包

时间:2012-11-12 15:30:31

标签: java ant

我最近开始学习ant并且遇到了一些麻烦,我基本上有2个软件包并且我正在尝试编译这两个软件包,但是这两个软件包都是由相互依赖的java文件组成的(egajava来自package1依赖于b。来自package2的java,反之亦然)因此我不能用另一个编译一个,例如下面的。

<?xml version="1.0"?>
  <project name="exampleproject" basedir="." default="compile">
  <property name="src1" value="package1"/>    
  <property name="src2" value="package2"/> 
  <property name="dest" value="build"/>
  <property name="classpath" value="${dest}"/>
<target name="clean">
    <delete dir="${dest}"/>
</target>
<target name="build" depends="clean">
    <mkdir dir="${dest}"/>
</target>
<target name="compile" depends="clean,build">
      <javac srcdir="${src1}" destdir="${dest}"
         classpath="${classpath}"
         includeantruntime="false">
       </javac>
       <javac srcdir="${src2}" destdir="${dest}"
         classpath="${classpath}"
         includeantruntime="false">
       </javac>
</target>
</project>

从测试开始这不起作用,因为尝试编译package1时构建失败,因为package2中的类尚未编译,我唯一的解决方案是重构我的程序,任何人都有任何更好的想法如何解决这个问题问题

感谢。

2 个答案:

答案 0 :(得分:3)

根据http://ant.apache.org/manual/Tasks/javac.html

  

javac的srcdir,classpath,sourcepath,bootclasspath和extdirs   属性是类似路径的结构,也可以通过嵌套设置    (注意不同的名字!),,,    和元素,分别

所以你可以使用

  <javac destdir="${dest}" classpath="${classpath}" includeantruntime="false">
    <src path="${src1}"/>
    <src path="${src2}"/>
  </javac>

答案 1 :(得分:2)

您遇到了一个无法解决的循环依赖问题。您应该重新组织模块,以便它没有依赖循环。将共同依赖项移动到第三个新模块或类型中通常是一个良好的开端。这就是xy-commons模块诞生的方式..: - )