> openjpa-maven-plugin is actually an interesting case. openjpa:enhance,
> for example, will make it very hard or impossible for
> maven-compiler-plugin to decide if it needs to rebuild anything or not.

No, not a problem at all. It detects if the classes are already implementing 
PersistenceCapable and don't touch them in that case.


> This breaks if BeanA and BeanA2 are in in different modules of the same
> reactor build. It really is necessary to track what inputs, i.e. sources
> and external dependencies, contributed to each generated .class to
> guarantee correct output.

Nope, is perfectly working already. Check the latest source from trunk.

If you have them in different modules then you can only have them linked in a 
single direction anyway. And this direction gets properly detected now in 2.6.


LieGrue,
strub



----- Original Message -----
> From: Igor Fedorenko <i...@ifedorenko.com>
> To: dev@maven.apache.org
> Cc: 
> Sent: Friday, September 7, 2012 11:44 PM
> Subject: Re: [incremental build] Detect leftovers from a previous build
> 
> 
> 
> On 12-09-07 2:37 AM, Mark Struberg wrote:
>>>  I may be missing something, but if all plugins implement this
>>>  logic, how it will be different from implicitly doing "clean"
>>>  during each build?
>> 
>>  There is actually a huge difference
>> 
>>  a.) yes, there are quite a few of such plugins which do not need
>>  this. Think about sql-maven-plugin, openjpa-maven-plugin, etc
>> 
> 
> openjpa-maven-plugin is actually an interesting case. openjpa:enhance,
> for example, will make it very hard or impossible for
> maven-compiler-plugin to decide if it needs to rebuild anything or not.
> 
>>  b.) A plugin will only delete all it's output from a previous
>>  invocation AFTER it detects that it really needs to do something! If
>>  there is e.g. no .java file which is newer than it's corresponding
>>  .class and no .java file got added or removed, then the whole
>>  compilation doesn't get triggered. Of course it's currently 
> (without
>>  such a helper) hard to detect if a file got removed from src/...
>> 
> 
> 
>>  A very simple hack would be to create a DirectoryScanner and store /
>>  later compare the md5 of all ./src files and trigger the clean
>>  lifecycle if that got changed. That seems to be the stuff the
>>  incremental-build-plugin does. That would be better than nothing, but
>>  not sure if it would be sufficient. I'd at least try to get rid of
>>  unnecessary surefire executions.
>> 
> 
> This breaks if BeanA and BeanA2 are in in different modules of the same
> reactor build. It really is necessary to track what inputs, i.e. sources
> and external dependencies, contributed to each generated .class to
> guarantee correct output.
> 
> --
> Regards,
> Igor
> 
>>  LieGrue, strub >
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Igor Fedorenko <i...@ifedorenko.com>
>>>  To: dev@maven.apache.org
>>>  Cc:
>>>  Sent: Friday, September 7, 2012 4:14 AM
>>>  Subject: Re: [incremental build] Detect leftovers from a previous build
>>> 
>>>  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: 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
>> 
> 
> ---------------------------------------------------------------------
> 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