[
http://jira.codehaus.org/browse/MNG-4189?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benjamin Bentmann updated MNG-4189:
-----------------------------------
Attachment: MNG-4189.patch
With your patch, we effectively have
{code:java}
boolean resolved = false;
if ( !destination.exists() || force )
{
...
resolved = true;
}
else if ( destination.exists() ) // Note that this is equivalent to just
"else"
{
...
resolved = true;
}
{code}
In other words, the flag {{resolved}} will always be {{true}}. This in turn
will make {{if ( resolved || !copy.exists() )}} equivalent to {{if (true)}},
thereby always executing the {{FileUtils.copyFile(destination, copy)}}. Hence,
Maven will end up copying each and every snapshot dependency. For bigger
projects, I can imagine this accumulates to significant IO, slowing down the
build.
The attached patch proposes to compare the file's timestamp&size instead of
using the {{resolved}} flag. This should also ensure that
artifact-<baseVersion>.jar matches the last resolved timestamp version but
still avoids unnecessary file copies in case nothing changed.
> Maven not picking up specific timestamped version dependency when a later
> timestamped version was downloaded and already present in the local repository
> --------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: MNG-4189
> URL: http://jira.codehaus.org/browse/MNG-4189
> Project: Maven 2
> Issue Type: Bug
> Components: Artifacts and Repositories, General
> Affects Versions: 2.0.9, 2.1.0
> Reporter: Maria Odea Ching
> Assignee: Maria Odea Ching
> Attachments: MNG-4189-core-integration-testing.patch,
> MNG-4189-maven-2.1.x.patch, MNG-4189.patch, mng-4189.zip
>
>
> To reproduce this issue:
> # Create a project (let's call this projectA) with a class named ClassA
> having a method named methodA(). Set the version as 1.0-SNAPSHOT and set
> uniqueVersion=true.
> # Deploy this in a remote repository
> # Create another project (let's call this projectB) which has a dependency on
> projectA. Set the dependency's version to the specific timestamped version
> when projectA was deployed in step 2. Create a class named ClassB and add a
> method which invokes ClassA's methodA().
> # Add your remote repository either in the settings or in the pom.
> # Build projectB. You will get a successful build.
> # Now go back to projectA and remove methodA() from classA.
> # Deploy projectA to the remote repository again.
> # Update the dependency version of projectA in projectB's pom.xml. Set it to
> the latest timestamp version.
> # Build projectB. Your build will fail because methodA() was removed.
> # Revert the dependency version of projectA in projectB's pom.xml. Set it to
> the same value you've set in step 3.
> # Build projectB. Your build will still fail even though you've set the
> correct version.
--
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