1

我最近开始学习 ant 并且遇到了一些麻烦,我基本上有 2 个包并且正在尝试编译这两个包,但是两个包都包含相互依赖的 java 文件(来自 package1 的 egajava 依赖于来自 package2 的 b.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 中有尚未编译的类,我唯一​​的解决方案是重组我的程序,有人对如何解决这个问题有更好的想法吗?

谢谢。

4

2 回答 2

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>
于 2012-11-12T15:39:13.317 回答
2

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

于 2012-11-12T15:34:18.010 回答