<javac> rebuilds even if source not changed

View: New views
2 Messages — Rating Filter:   Alert me  

<javac> rebuilds even if source not changed

by Jean-Rene David-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

If 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>
   <target name="clean">
      <delete dir="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 shouldn't.

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

Then <javac> doesn't rebuild the file:

$ ant
Buildfile: build.xml

build:

BUILD SUCCESSFUL
Total time: 0 seconds

What idiom am I missing?

Thanks for any input,

--
JR

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@...
For additional commands, e-mail: user-help@...


RE <javac> rebuilds even if source not changed

by Nicolas Vervelle :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

Maybe try putting your javafile elsewhere :
* in a src/ dir (so that javac destdir is not a subdirectory of srcdir,
which probably confuses javac)
* by respecting the package / directory structure : it should be in
my/class/ package hierarchy

My 2 cts
Nico


Jean-Rene David <jrdavid@...> wrote on 27/04/2008 04:33:19:

> Hello,
>
> If 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>
>    <target name="clean">
>       <delete dir="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 shouldn't.
>
> 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
>
> Then <javac> doesn't rebuild the file:
>
> $ ant
> Buildfile: build.xml
>
> build:
>
> BUILD SUCCESSFUL
> Total time: 0 seconds
>
> What idiom am I missing?
>
> Thanks for any input,
>
> --
> JR
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@...
> For additional commands, e-mail: user-help@...
>







Ce message est à l'attention exclusive des destinataires désignés. Il peut
contenir des informations confidentielles. Si vous n'êtes pas destinataire
du message, merci d'en avertir immédiatement l'expéditeur et de détruire
ce message. Le contenu de ce message ne pourrait engager la responsabilité
de Steria que s'il a été émis par une personne dûment habilitée agissant
dans le strict cadre de ses fonctions et à des fins non étrangères à ses
attributions. Bien que les meilleurs efforts soient faits pour maintenir
cette transmission exempte de tout virus, l'expéditeur ne donne aucune
garantie à cet égard et sa responsabilité ne saurait être engagée pour
tout dommage résultant d'un virus transmis.


This message is intended exclusively for the designated addressee. It may
contain confidential material. If you are not the correct addressee,
please notify the sender immediately and destroy the message. The content
of this message will engage the responsibility of Steria only if it has
been sent by an authorized person acting in the strict scope of his
functions and for purposes that are related to his competence. Although
reasonable efforts have been made to keep this transmission free from
viruses, the sender will not be liable for damages caused by a transmitted
virus.