[
https://issues.apache.org/jira/browse/IVY-541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12508135
]
Oystein Aadland commented on IVY-541:
-------------------------------------
I think that I have identified the offending code. The problem lies in
IvyNode.loadData() line 704. This line only adds artifacts specifically
included and not all if none is specified. So I propose changing the code from:
<--- CLIP
DependencyDescriptor dd = getDependencyDescriptor(getParent());
if (dd != null) {
addDependencyArtifactsIncludes(_rootModuleConf,
dd.getDependencyArtifactsIncludes(getParentConf())); // LINE 704
}
<--- CLIP
To:
<--- CLIP
DependencyDescriptor dd = getDependencyDescriptor(getParent());
if (dd != null) {
DependencyArtifactDescriptor[] deps =
dd.getDependencyArtifactsIncludes(getParentConf());
if (deps.length == 0 && _md != null) {
deps = getDefaultIncludedForConfiguration(dd);
}
addDependencyArtifactsIncludes(_rootModuleConf, deps);
}
...
private DependencyArtifactDescriptor[]
getDefaultIncludedForConfiguration(DependencyDescriptor dd) {
DependencyArtifactDescriptor[] deps;
Artifact[] arts = _md.getArtifacts(getRootModuleConf());
deps = new DependencyArtifactDescriptor[arts.length];
for (int i=0; i<arts.length; i++) {
Artifact art = arts[i];
DefaultDependencyArtifactDescriptor ddad = new
DefaultDependencyArtifactDescriptor(
new DefaultDependencyDescriptor(_md, _md.getModuleRevisionId(),
dd.isForce(), dd.isChanging(), dd.isTransitive()),
art.getName(),
art.getType(),
art.getExt(),
true,
ExactPatternMatcher.getInstance()
);
ddad.addConfiguration(getRootModuleConf());
deps[i] = ddad;
}
return deps;
}
<--- CLIP
This worked in my case, but please understand that I am not very familiar with
the ivy source so I might have missed some other important point. Anyway, it's
probably a good start.
> Transitive dependencies resolves incorrectly when different modules uses the
> same dependency with different configurations in the same build
> --------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: IVY-541
> URL: https://issues.apache.org/jira/browse/IVY-541
> Project: Ivy
> Issue Type: Bug
> Components: Core
> Affects Versions: 1.4.1
> Environment: NA
> Reporter: Oystein Aadland
>
> When modules that uses the same dependencies with different configuration(or
> different includes) then only the first module that is resolved gets the
> artifacts that it specifies. The other gets what was last resolved.
> Module A that uses module B.
> Module B uses a build configuration of module C
> Module A uses a build configuration of module C and a runtime configuration
> of module B
> Module B downloads explicit jars from C depending on configuration.
> When I resolve A in build configuration I only get the explicit defined
> runtime jars that B defines for module C.
> Here are snippets of the ivy files.
> Module A:
> ...
> <dependencies>
> <dependency org="myorg" name="B" rev="1.6" conf="build->runtime" />
> <dependency org="myorg" name="C" rev="1.10" conf="build,runtime->default"
> />
> </dependencies>
> ...
> Module B
> ...
> <configurations>
> <conf name="build" visibility="private"/>
> <conf name="runtime"/>
> </configurations>
> <dependencies>
> <dependency org="myorg" name="C" rev="1.10" conf="build,runtime->default">
> <artifact name="art1" type="jar" conf="runtime"/>
> <artifact name="art2" type="jar" conf="runtime"/>
> <artifact name="art3" type="jar" conf="runtime"/>
> </dependency>
> </dependencies>
> ...
> Module C
> ...
> <publications>
> <artifact name="art1" type="jar" conf="default"/>
> <artifact name="art2" type="jar" conf="default"/>
> <artifact name="art3" type="jar" conf="default"/>
> <artifact name="art4" type="jar" conf="default"/>
> </publications>
> ...
> If module A had explicitly added the artifacts that it needed for module C it
> would have worked fine. The way it should work is that if no specific
> artifacts are included, the all artifacts for the given configuration should
> have been included.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.