[
https://issues.apache.org/jira/browse/IVY-966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Juliano DeCarvalho updated IVY-966:
-----------------------------------
Attachment: ivy.xml
> Problem resolving latest jar from multiple repositories containing same jar
> with different versions
> ---------------------------------------------------------------------------------------------------
>
> Key: IVY-966
> URL: https://issues.apache.org/jira/browse/IVY-966
> Project: Ivy
> Issue Type: Bug
> Affects Versions: 2.0-RC2
> Environment: Windows XP SP2, JDK 1.6.0.05
> Reporter: Juliano DeCarvalho
> Attachments: build.xml, ivy.xml
>
>
> This problem may be related to my configuration, but if it is, I'm not sure
> how to fix it.
> My project has a dependency on a jar that I build with another project. This
> jar can be found in two different maven repositories, one local and one
> shared. The jars have different modification dates but the same revision
> (SNAPSHOT) in either repository. I need Ivy to find the latest of the two
> jars. Both repositories are located on my local filesystem, for testing
> purposes.
> Ivy does not seem to return the latest of the two jars. It seems to randomly
> select one, from what I can see. I have debugged into the code and I think I
> found the problem, but not the cause or a solution.
> My configuration:
> *Ant:*
> {quote}
> <property name="ivy.shared.default.root"
> value="c:/repos/shared" />
> <property name="ivy.local.default.root" value="c:/repos/local"
> />
> <property name="ivy.local.default.ivy.pattern"
> value="[organisation]/[module]/[revision]/ivy.xml" />
> <property name="ivy.local.default.artifact.pattern"
> value="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
> <ivy:settings file="ivysettings.xml" />
> <ivy:resolve file="ivy.xml" />
> <ivy:retrieve pattern="./[artifact]-[revision].[ext]" />
> {quote}
> *ivy.xml:*
> {quote}
> <ivy-module version="2.0">
> <info organisation="com.test" module="testapp" />
> <dependencies>
> <dependency org="com.test" name="components-codegenUtils"
> rev="4.1.0-SNAPSHOT" changing="true">
> <include type="jar" />
> </dependency>
> </dependencies>
> </ivy-module>
> {quote}
> *ivysettings.xml:*
> {quote}
> <ivysettings>
> <settings defaultResolver="default" />
> <property name="ivy.shared.default.root"
> value="${ivy.default.ivy.user.dir}/shared" override="false" />
> <property name="ivy.shared.default.ivy.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
> override="false" />
> <property name="ivy.shared.default.artifact.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
> override="false" />
> <property name="ivy.local.default.root"
> value="${ivy.default.ivy.user.dir}/local" override="false" />
> <property name="ivy.local.default.ivy.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
> override="false" />
> <property name="ivy.local.default.artifact.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
> override="false" />
> <resolvers>
> <filesystem name="local" m2compatible="true">
> <ivy
> pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}" />
> <artifact
> pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}" />
> </filesystem>
> <filesystem name="shared" m2compatible="true">
> <ivy
> pattern="${ivy.shared.default.root}/${ivy.local.default.ivy.pattern}" />
> <artifact
> pattern="${ivy.shared.default.root}/${ivy.local.default.artifact.pattern}" />
> </filesystem>
> <chain name="main" dual="true">
> <resolver ref="shared" />
> </chain>
> <chain name="default" returnFirst="false">
> <resolver ref="local" />
> <resolver ref="main" />
> </chain>
> </resolvers>
> </ivysettings>
> {quote}
> Here are the sequence of events which occur to cause this problem:
> - Code enters AbstractResolver.checkLatest(ResolvedModuleRevision,
> ResolveData), passing in the local artifact
> - Code returns artifact as latest since its the first one found
> - Code enters the checkLatest method again with the second (and newer by
> modification date) artifact
> - Code calls isAfter(newModuleFound, previousModuleFound, data.getDate())
> - newModuleFound is the second artifact, newer by date
> - previousModuleFound is the first artifact, which is older
> - data.getDate() is null
> - isAfter() creates an array [ newModuleFound, previousModuleFound ] and
> passes that to LatestRevisionStrategy.findLatest()
> - findLatest() iterates over the array backwards
> - findLatest() states that it iterates backwards because, and I quote:
> "the latest revision comes last, use a ListIterator to iterate the sorted
> list in the reverse direction.". Now, this is incorrect in my case since the
> array passed in clearly has the newer module found (the jar with the newer
> modification date) in slot 0
> - findLatest() returns the older revision artifact because the assumptions it
> makes about the array are wrong
> I hope that makes sense. If there's anything else that you need to replicate
> this problem, please let me know.
> Thank you,
> - Juliano DeCarvalho
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.