有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

现在我遇到的问题是,当我尝试构建“安卓”项目时,它也想构建所有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的源文件


共 (1) 个答案

  1. # 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元素也应该使用相对路径工作。不过,我还没有测试过这个