1

根据我之前关于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 构建的单独 traget。

现在我遇到的问题是,当我尝试构建“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 的类。

所以我有两个问题:

  1. 组织这个项目的最佳方式是什么?您会建议我尝试过的两种方法中的一种还是完全其他的方法?

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

4

1 回答 1

1

如何在 Ant 中使用 javac 排除源包?以及如何在 ant 的 javac 任务中排除源?,我找到了使用<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元素应该使用相对路径也能正常工作。不过,我还没有对此进行测试。

于 2012-09-28T01:19:33.910 回答