I may be missing something, but if all plugins implement this logic,
how it will be different from implicitly doing "clean" during each
build? Or, put differently, are there plugins that do not need to clean
their previous output to be absolutely sure they properly handle
incremental rebuilds?
--
Regards,
Igor
On 12-09-06 2:52 PM, Mark Struberg wrote:
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: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]