Jean-Rene David wrote:
Hello,
When a class is in a package, the <javac> target
always rebuilds it even if the source hasn't
changed. Here's a test case:
$ ant -version
Apache Ant version 1.7.0 compiled on December 13 2006
$ ls
build.xml
Welcome.java
$ cat Welcome.java
package My.Class;
public class Welcome
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
$ cat build.xml
<?xml version="1.0"?>
<project name="test" default="build" basedir=".">
<target name="build">
<mkdir dir="foo" />
<javac srcdir="." destdir="foo" />
</target>
</project>
$ ant
Buildfile: build.xml
build:
[mkdir] Created dir: /tmp/testcase/foo
[javac] Compiling 1 source file to /tmp/testcase/foo
BUILD SUCCESSFUL
Total time: 1 second
Now I just run it again:
$ ant
Buildfile: build.xml
build:
[javac] Compiling 1 source file to /tmp/testcase/foo
BUILD SUCCESSFUL
Total time: 0 seconds
And it recompiles but the source file hasn't
changed.
My class is part of the My.Class package, so javac
put it in: foo/My/Class:
$ find
.
./Welcome.java
./build.xml
./foo
./foo/My
./foo/My/Class
./foo/My/Class/Welcome.class
But the <javac> task doesn't recurse the hierarchy
to find the class file. It only looks in the
"destdir" itself. So if I just:
$ touch foo/Welcome.class
you must move the class under the package name it is in. Without that
not only does ant not do any dependency checking (is it expected to
remember where every .class file comes from?) and sun's javac compiler
wont build files in the correct order.
--
Steve Loughran http://www.1060.org/blogxter/publish/5
Author: Ant in Action http://antbook.org/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]