根据my previous question on programmers.SE的建议,我将当前项目拆分为三个子目录(swing,common和android),并在每个子目录中创建单独的Ant脚本。现在,我轻松地在swing和common中创建了NetBeans项目,并且能够设置正确的依赖项来编译Swing应用程序。然后,当我使用“common”项目中的类时,我意识到我需要为Android构建过程提供另一个Ant脚本。
所以现在我有四个Ant脚本用于构建项目的不同部分,以及每个项目的单独的src,test和其他支持目录。我遇到的第一个问题是NetBeans和我的“android”项目的ant脚本都希望在我的“common”项目中使用“build.xml”来执行各种构建任务,其中一些具有名称冲突。我决定使用src,test等子目录将所有这些项目合并回一个目录。源代码已经组织成每个项目的单独包,我认为这会使它更简单,因为我可以有一个单独的Ant构建脚本,其中包含用于Swing和Android构建的单独的tragets。
现在我遇到的问题是,当我尝试构建“android”项目时,它也希望构建所有Swing类。这会带来很多编译器错误。我甚至修改了<javac>
任务,试图从编译中排除bbct.swing
包层次结构:
<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>
Ant仍然坚持编译使用Swing的类。
所以我有两个问题:
组织这个项目的最佳方法是什么?你会建议我尝试过的两个中的一个还是完全不同的东西?
如果我坚持使用我最新的解决方案,如何让javac
忽略项目中基于Swing的源文件?
答案 0 :(得分:1)
在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
元素应该使用相对路径也可以正常工作。不过,我还没有测试过这个。