gpt4 book ai didi

java - 如何强制ant javac任务覆盖目标目录中的类文件?

转载 作者:行者123 更新时间:2023-12-01 21:43:19 25 4
gpt4 key购买 nike

这是我想要实现的目标的一个非常简化的版本。我有两个目录,Directory1Directory2。这两个目录都包含 Java 源文件。 Directory2 中的某些文件可以具有与 Directory1 中的文件相同的完全限定类名。

使用 ant,文件首先从 Directory1 编译到名为 CompileDirectory 的目录,然后从 Directory2 编译。我希望编译 Directory2 中的文件并覆盖 Directory1 中已编译的类文件。然而,ant 似乎忽略了具有相同完全限定类名的类。

这是一个简单的例子 -

目录结构

$ ls -R
.:
build.xml CompileDirectory Directory1 Directory2

./CompileDirectory:

./Directory1:
A.java

./Directory2:
A.java

构建.xml

<project name="TestProject" default="build" basedir=".">

<target name="build" depends="javac1, javac2" />

<target name="javac1">
<javac srcdir="${basedir}/Directory1" destdir="CompileDirectory" includeantruntime="false"/>
</target>

<target name="javac2">
<javac srcdir="${basedir}/Directory2" destdir="CompileDirectory" includeantruntime="false"/>
</target>

</project>

Ant 跑

$ ant -buildfile build.xml 

Buildfile: ...(path).../build.xml

javac1:
[javac] Compiling 1 source file to ...(path).../CompileDirectory

javac2:

build:

BUILD SUCCESSFUL
Total time: 0 seconds

可以看出,上面的javac2目标什么也没做。

当我运行 Java 程序时,我看到该类文件是 Directory1 中的类文件。

$ cd CompileDirectory/
$ java A
I am class A from directory 1

有没有办法强制javac2目标中的javac任务编译Directory2中的源文件并覆盖Directory2中的类文件编译目录

最佳答案

这与文件的时间戳以及编译器是否认为源文件比类文件新有关。

<project name="TestProject" default="build" basedir=".">

<target name="build" depends="javac1, touch2, javac2" />

<target name="javac1">
<javac srcdir="${basedir}/Directory1" destdir="CompileDirectory" includeantruntime="false"/>
</target>

<target name="touch2">
<sleep seconds="2" />
<touch datetime="now">
<fileset dir="${basedir}/Directory2" />
</touch>
</target>

<target name="javac2">
<javac srcdir="${basedir}/Directory2" destdir="CompileDirectory" includeantruntime="false"/>
</target>

</project>

关于java - 如何强制ant javac任务覆盖目标目录中的类文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36222950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com