Hi!

I had some idea for detecting stale changes in maven which is pretty generic


The problem hits us if you compile BeanA and BeanA2 in a project where BeanA2 
is using BeanA.
On a 

$> mvn clean compile

you will get both BeanA.class and BeanA2.class in target/classes
Now delete BeanA.java
Currently (2.6-SNAPSHOT) the maven-compiler-plugin only compiles all sources 
without doing any cleanup and thus BeanA.class will still remain in 
target/classes.


That is clearly a bug as BeanA2 will be left broken, packaged into a broken 
jar, ...



How can we avoid that?

Simple answer: A plugin which doesnt support those cases by the underlying took 
(javac) must always first clean up the stuff it generated during the last 
invocation.

How can we do that?

step 1: Start a DirectoryScanner and get all files in target/classes. Remember 
this list!


step 2: Run the compiler


step 3: List all files in target/classes again and remove all files you found 
in step 1. You will end up with a list of all files generated by the 
compilation as result.

step 4: Store this list into 
target/maven-status/maven-compiler-plugin/default/createdfiles.lst ('default' 
is the plugin execution. We need this in case we have multiple <executions>).


On the next compile you just need to check if you have such a createdfiles.lst 
file and then first remove all the files listed in it as step 0.
Then you can continue with step 1 from scratch.

We could easily create a utility class for it which keeps the state with methods

public class ChangeDetector /* TODO find better name */
{
File[] readPreviouslyDetectedFileList(File targetFile);
void recordFiles(File baseDir)
File[] detectNewFiles();
storeDetectedFileList(File targetFile)
}

This can e.g. also be used by the maven-resources-plugin to get rid of copied 
resources which got deleted from src/main/resources.

Do you have a better idea? Any ideas for improving this?
And a big question: how can I get hold of the current <execution> id in a 
plugin?


LieGrue,
strub

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to