java - 使用 Ant 从同一代码库构建 Swing 和 Android 应用程序

标签 java android swing ant

基于 my previous question on programmers.SE 的建议,我将当前项目拆分为三个子目录(swing、common 和 android),并在每个子目录中创建了单独的 Ant 脚本。现在,我可以轻松地在 swing 和 common 中创建 NetBeans 项目,并且能够设置适当的依赖项来编译 Swing 应用程序。然后,当我开始使用“公共(public)”项目中的类时,我意识到我需要为 Android 构建过程准备另一个 Ant 脚本。

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

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

最佳答案

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元素应该使用相对路径也能正常工作。不过,我还没有对此进行测试。

关于java - 使用 Ant 从同一代码库构建 Swing 和 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632169/

相关文章:

java - 如何通过 it 属性为枚举设置一些值

java - 为什么当我迭代每行中的 TableCellEditor 列时,itemStateChanged 仅调用一次?

java - 如何使用 netbeans Swing GUI 构建器

java - 在java中滚动时 View 会扭曲

java - Android 中的内存管理

android - SyncAdapter 同步自定义应用程序数据?

java - 如何将带分隔符的平面文件解析为 POJO

java - 通过互联网与 Android 手机和 PC 进行 2 种方式通信

java - 为什么我们可以使用 Node head = null 而无需在 Java 中实例化 'head' ?

android - Eclipse/Android : "Errors running builder ' Android Pre Compiler' on project. ..”