【问题标题】:Compiling 1 file with Javac / Ant also compiles imported file/class in specified file用 Javac / Ant 编译 1 个文件也会在指定文件中编译导入的文件/类
【发布时间】:2019-11-08 05:14:44
【问题描述】:

手头的任务是使用 Ant 脚本分别编译 Java 类及其关联的 JUnit 'Test' 类。 常规类存储在“src”中,而测试类存储在“test/src”中。常规类应编译为“bin”,测试类应编译为“test/bin”。两者都在同一个包中。

我的 Ant 脚本如下所示:

<javac
     includeantruntime="false"
     classpathref="master-classpath"
     destdir="${test.class.build.dir}" 
                                        >
     <src path="${src.dir}"/>
     <src path="${test.class.dir}"/>
     <include name="**/*Test*.java"/>
</javac>

运行脚本显示我只会编译一个文件:

    [javac] Compiling 1 source file to C:\Users\AK_Flex\Desktop\HW01\test\bin

但是,测试类及其导入的常规类(已在“bin”中编译)正在编译并输出到“test/bin”文件夹。 常规类不导入测试类,因此 'bin' 看起来符合要求。 (代码未描述) 有没有办法规避编译器的这种行为?

【问题讨论】:

  • 是的,javac 会这样做,如有必要,它会编译命名类所依赖的类。
  • 在这种情况下,“如有必要”是什么意思?有没有办法向编译器显示已经编译的文件,所以它不会再次编译它?
  • 也许-implicit:none 可以提供帮助,基于documentation of javac:“如果您希望能够引用其他源文件中的类型但不希望它们被编译,请使用-隐式选项。”。关于您的评论:-classpath?
  • @Jordan181 是的,把已经编译好的文件放到classpath下。

标签: java junit ant javac


【解决方案1】:

由于您希望在两个不同的文件夹中编译类,因此需要两个编译步骤。

<javac includeantruntime="false"
       srcdir="src"
       destdir="bin"
       classpathref="master-classpath">
</javac>
<javac includeantruntime="false"
       srcdir="test/src"
       destdir="test/bin">
    <classpath>
        <pathelement location="bin"/>
        <path refid="master-classpath"/>
    </classpath>
</javac>

【讨论】:

  • 谢谢它现在按预期工作,我做了 2 个编译步骤,但在第二步中缺少已构建文件的构建目录路径。
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多