[
https://issues.apache.org/jira/browse/IVY-1248?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nicolas Lalevée reassigned IVY-1248:
------------------------------------
Assignee: Nicolas Lalevée
> Module inheritance sometimes fails to locate parent descriptor in deliver
> process
> ---------------------------------------------------------------------------------
>
> Key: IVY-1248
> URL: https://issues.apache.org/jira/browse/IVY-1248
> Project: Ivy
> Issue Type: Bug
> Components: Ant
> Affects Versions: 2.2.0
> Reporter: Jean-Louis Boudart
> Assignee: Nicolas Lalevée
> Priority: Minor
> Attachments: ivy1248-r1033912.patch
>
>
> I recently discovered a bug in Module Inheritance feature (i.e. extends).
> {code:xml}
> <extends organisation="net.foo" module="bar" revision="latest.integration"
> location="../myParent" extendTypes="configurations,dependencies"/>
> {code}
> The feature works fine if the parent descriptor is already published in your
> repository, it will use the MRID to retrieve the parent module.
> We also can use a "location" attribute (for dev mode) which defines where to
> find the parent descriptor. This can make particular sense if you need to
> share metadatas (dependencies, configurations, whatever) across many
> subprojects.
> If we get into technical details when "extend" element is found ivy will :
> * check on filesystem if parent module exists (based on location attribute).
> If no location attribute is found ivy will look in the default one
> "../ivy.xml".
> * if not found, it will check in the cache using MRID. However it just ignore
> the version attribute. To be exact it ask for WorkingRevision.
> * if not found it will query repositories using the real MRID (here the
> version attribute is taken in consideration)
> * if found it will try to flush the parent descriptor in the cache
> Everything works :)
> But when you invoke ivy:deliver (directly or through ivy:publish) ivy parse
> the resolved module descriptor in the cache. And the complication comes here.
> Imagine you never publish the "parent module" in the repository. When you
> will invoke ivy:deliver / ivy:publish ivy will :
> * parse your module descriptor (the one <extend>ing your parent) from the
> cache
> * while parsing ivy will find the <extend> element and will try to locate the
> parent descriptor
> * check the location attribute <-- fail because cache pattern is fully
> configurable in ivy and almost never match with the default value "../ivy.xml"
> * check the cache with the given MRID (organisation="net.foo" module="bar"
> but with working revision ) <-- almost never find it
> * check the repositories with the real mrid (organisation="net.foo"
> module="bar" revision="latest.revision") <-- fail as we never published our
> parent descriptor.
> * deliver process will fail !
> We never really encoutered the problem as this feature was developped in
> easyant context and we were doing a lot of stuff around this feature. In
> almost all cases parent descriptor was published by an other mechanism of
> easyant in a "build scoped repository" (kind of filesystem based repository
> local to the project).
> While refactoring the code in easyant i just realized that somethings was
> wrong.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.