我最近开始学习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中的类尚未编译,我唯一的解决方案是重构我的程序,任何人都有任何更好的想法如何解决这个问题问题
感谢。
答案 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模块诞生的方式..: - )