使用Ant从相同的代码库构建Swing和Android应用程序

问题描述:

根据my previous question on programmers.SE的建议,我将当前项目分为三个子目录(swing,common和android),并在每个子目录中创建单独的Ant脚本。现在,我轻松地创建了NetBeans项目,并且能够设置合适的依赖项来编译Swing应用程序。然后,当我去使用“普通”项目中的类时,我意识到我需要为Android构建过程创建另一个Ant脚本。使用Ant从相同的代码库构建Swing和Android应用程序

所以现在我有四个Ant脚本用于构建我的项目的不同部分,以及每个项目的单独的src,test和其他支持目录。我遇到的第一个问题是NetBeans和我的“android”项目的ant脚本都想在我的“common”项目中使用“build.xml”来执行各种构建任务,其中一些包含名称冲突。我决定将所有这些项目合并到一个包含src,test等子目录的目录中。源代码已经被组织到每个项目的单独的包中,我认为这会使它更简单,因为我可以为Swing和Android构建包含单独的Ant构建脚本和单独的tragets。

现在我遇到的问题是,当我尝试构建“android”项目时,它也想构建所有的Swing类。这带来了很多编译器错误。我甚至修改试图从compileing排除bbct.swing包层次的<javac>任务:

 <javac encoding="${java.encoding}" 
       source="${java.source}" target="${java.target}" 
       debug="true" extdirs="" includeantruntime="false" 
       destdir="${out.classes.absolute.dir}" 
       bootclasspathref="project.target.class.path" 
       verbose="${verbose}" 
       classpathref="project.javac.classpath" 
       fork="${need.javac.fork}" 
       excludes="${source.dir}/bbct/swing/**"> <------- here 
      <src path="${source.absolute.dir}" /> 
      <src path="${gen.absolute.dir}" /> 
      <compilerarg line="${java.compilerargs}" /> 
     </javac> 

蚂蚁仍然坚持我的编译类,其使用Swing,虽然。

所以我有两个问题:

  1. 什么是组织这个项目的最好方法是什么?你会建议我尝试完成的其中一个还是其他的?

  2. 如果我坚持使用最新的解决方案,我该如何让javac忽略项目中基于Swing的源文件?

之间How to exclude a source package using javac in Ant?How can I exclude sources in a javac task in ant?,我发现使用<exclude>元件,而不是excludes属性的溶液。下面是相关<javac>任务:

 <javac encoding="${java.encoding}" 
       source="${java.source}" target="${java.target}" 
       debug="true" extdirs="" includeantruntime="false" 
       destdir="${out.classes.absolute.dir}" 
       bootclasspathref="project.target.class.path" 
       verbose="${verbose}" 
       classpathref="project.javac.classpath" 
       fork="${need.javac.fork}"> 
      <src path="${source.absolute.dir}" /> 
      <exclude name="bbct/swing/**" /> 
      <src path="${gen.absolute.dir}" /> 
      <compilerarg line="${java.compilerargs}" /> 
     </javac> 

附录:

我怀疑这个解决方案的核心在于使用相对路径至source属性或<src>元素。这意味着一个excludes元素应该使用相对路径。虽然我还没有测试过。