Answers inside.

LieGrue,
strub



----- Original Message -----
> From: Anders Hammar <and...@hammar.net>
> To: Maven Developers List <dev@maven.apache.org>; Mark Struberg 
> <strub...@yahoo.de>
> Cc: 
> Sent: Thursday, September 6, 2012 9:51 PM
> Subject: Re: [incremental build] Detect leftovers from a previous build
> 
> What you talk about here is something that BuildContext should
> provide, if we stay with that. There's a scanner for changes and a
> deleteScanner.

The BuildContext looks indeed like a good candidate!


> The really tricky thing is when one source file has more than one
> output/target file (like inner classes). The plugin needs some way of
> knowing what target file(s) to remove. 

I know, that + the cross dependencies which are almost unpredictable (would 
require to parse and evaluate all sources). I opted for recompiling all sources 
because of that.


> I fit can't do that, then I
> guess the only option is to remove all the files it produced in the
> last execution.

Yes, that was this algorithm should make possible. 
The problem is that we cannot simply delete all files in target/classes, 
because parts of it might have been created by other plugins (e.g. the resource 
processing).


> 
> /Anders
> 
> On Thu, Sep 6, 2012 at 8:52 PM, Mark Struberg <strub...@yahoo.de> 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: dev-unsubscr...@maven.apache.org
>>  For additional commands, e-mail: dev-h...@maven.apache.org
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
> 

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

Reply via email to