[ 
http://jira.codehaus.org/browse/MWAR-78?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_90293
 ] 

Brian Reilly commented on MWAR-78:
----------------------------------

I think either my report was misunderstood or I'm misunderstanding the 
response.  This problem isn't about choosing which file to take from multiple 
war overlays.  It's about whether to use a file from a war overlay or from the 
project depending on that war.

I agree that overrides should not depend on a timestamp.  The problem that I 
reported was the result of code that does use timestamp checks.  The patch that 
I attached removes the timestamp check for the case that I ran into.

I should note that there are other uses of copyFileIfModified() in that file 
that I did not review to see if they should also be changed.  Also, I haven't 
checked to see if the code has changed since I reported the bug.

In general, the code seemed backwards to me.  It was copying the current 
project's files and then trying to choose the right files to copy from the 
dependency (which is where the timestamp check seemed to come in, though even 
that doesn't quite make sense).  A safer way to do it would be to copy the 
files from the dependency and then copy the current project's files on top, 
replacing anything that existed in the dependency.


> War overlay can overwrite files in dependant war artifact
> ---------------------------------------------------------
>
>                 Key: MWAR-78
>                 URL: http://jira.codehaus.org/browse/MWAR-78
>             Project: Maven 2.x War Plugin
>          Issue Type: Bug
>    Affects Versions: 2.0.1
>            Reporter: Brian Reilly
>         Assigned To: Stephane Nicoll
>         Attachments: maven-war-plugin-2.0.1-overlay-bug.diff
>
>
> Suppose there is a war artifact A that is depended on by war artifact B.  If 
> they contain files with the same name in src/main/webapp and the timestamp in 
> A is more recent than the timestamp in B, the file from A will be used.  I 
> don't know if it's officially stated in the docs, but I think the intention 
> is that files in B should always win regardless of timestamp.
> I've attached a diff (based on the maven-war-plugin-2.0.1 tag) that adds a 
> test case to WarExplodedMojoTest.java to demonstrate the problem.
> The cause seems to be the use of copyFileIfModified in 
> AbstractWarMojo.copyDependentWarContents().  I'm not sure why this should be 
> done (except in the case of trying to avoid triggering a hot redeploy, which 
> doesn't apply to all files).
> The diff also includes changes to AbstractWarMojo.java that fix the test 
> failures.  I've created a copyFile method that is a clone of 
> copyFileIfModified without the timestamp check.  That method is then used in 
> copyDependentWarContents instead.  Additionally, I pulled in the !new File( 
> warSourceDirectory, files[j] ).exists() check from trunk.  Lastly, I had to 
> change copyResources(File, File) to use copyFile as well in order to get the 
> tests to pass.
> There may be other places where copyFileIfModified could be replaced with 
> copyFile, but I haven't done an extensive audit of every place where 
> copyFileIfModified is being used.
> I also modified the last condition of testExplodedWarMergeWarUpdated because 
> it seemed incorrect to me and the fix that I made necessitated it.  The test 
> was explicitly making sure that the version of org/sample/company/test.jsp 
> from simple-updated.war remained even after changing the dependency back to 
> simple.war.  Put another way, the result of the last test would be different 
> depending on whether or not `mvn clean` is run after each dependency change.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to