You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ma...@apache.org on 2008/05/22 01:01:48 UTC
svn commit: r658922 - in /ant/ivy/core/trunk: ./
src/java/org/apache/ivy/plugins/parser/m2/
Author: maartenc
Date: Wed May 21 16:01:47 2008
New Revision: 658922
URL: http://svn.apache.org/viewvc?rev=658922&view=rev
Log:
FIX: Maven scope defined in POM dependencyManagement section not honoured (IVY-811)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Wed May 21 16:01:47 2008
@@ -81,6 +81,7 @@
- IMPROVEMENT: Change allownomd and skipbuildwithoutivy into a more semantically correct name (IVY-297)
- IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher
+- FIX: Maven scope defined in POM dependencyManagement section not honoured (IVY-811)
- FIX: SFTPRepository incorrectly calculates last modified time for resources (IVY-815)
- FIX: Filesystem resolver does not evaluate [branch] token when publishing (IVY-814)
- FIX: Using ivy:settings with the "id" attribute not behaving as expected (IVY-809)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java Wed May 21 16:01:47 2008
@@ -21,11 +21,17 @@
private String groupId;
private String artifactId;
private String version;
+ private String scope;
- public DefaultPomDependencyMgt(String groupId, String artifactId, String version) {
+ public DefaultPomDependencyMgt(String groupId, String artifactId, String version, String scope) {
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
+ this.scope = scope;
+ }
+
+ public String getScope() {
+ return scope;
}
public String getGroupId() {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java Wed May 21 16:01:47 2008
@@ -24,5 +24,7 @@
public abstract String getArtifactId();
public abstract String getVersion();
+
+ public abstract String getScope();
}
\ No newline at end of file
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java Wed May 21 16:01:47 2008
@@ -56,7 +56,7 @@
public class PomModuleDescriptorBuilder {
- private static final int DEPENDENCY_MANAGEMENT_KEY_PARTS_COUNT = 3;
+ private static final int DEPENDENCY_MANAGEMENT_KEY_PARTS_COUNT = 4;
public static final Configuration[] MAVEN2_CONFIGURATIONS = new Configuration[] {
new Configuration("default", Visibility.PUBLIC,
@@ -227,8 +227,10 @@
public void addDependency(Resource res, PomDependencyData dep) throws ParseException {
- if (!MAVEN2_CONF_MAPPING.containsKey(dep.getScope())) {
- String msg = "Unknown scope " + dep.getScope() + " for dependency "
+ String scope = dep.getScope();
+ System.out.println("*** scope = " + scope);
+ if ((scope != null) && (scope.length() > 0) && !MAVEN2_CONF_MAPPING.containsKey(scope)) {
+ String msg = "Unknown scope '" + scope + "' for dependency "
+ ModuleId.newInstance(dep.getGroupId(), dep.getArtifactId()) + " in "
+ res.getName();
throw new ParseException(msg, 0);
@@ -240,7 +242,8 @@
.getArtifactId(), version);
DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ivyModuleDescriptor,
moduleRevId, true, false, true);
- ConfMapper mapping = (ConfMapper) MAVEN2_CONF_MAPPING.get(dep.getScope());
+ scope = (scope == null || scope.length() == 0) ? getDefaultScope(dep): scope;
+ ConfMapper mapping = (ConfMapper) MAVEN2_CONF_MAPPING.get(scope);
mapping.addMappingConfs(dd, dep.isOptional());
Map extraAtt = new HashMap();
if (dep.getClassifier() != null) {
@@ -252,7 +255,7 @@
"jar", "jar", null, extraAtt);
// here we have to assume a type and ext for the artifact, so this is a limitation
// compared to how m2 behave with classifiers
- String optionalizedScope = dep.isOptional() ? "optional" : dep.getScope();
+ String optionalizedScope = dep.isOptional() ? "optional" : scope;
dd.addDependencyArtifact(optionalizedScope, depArtifact);
}
@@ -278,8 +281,12 @@
public void addDependencyMgt(PomDependencyMgt dep) {
- String key = getDependencyMgtExtraInfoKey(dep.getGroupId(), dep.getArtifactId());
+ String key = getDependencyMgtExtraInfoKeyForVersion(dep.getGroupId(), dep.getArtifactId());
ivyModuleDescriptor.addExtraInfo(key, dep.getVersion());
+ if (dep.getScope() != null) {
+ String scopeKey = getDependencyMgtExtraInfoKeyForScope(dep.getGroupId(), dep.getArtifactId());
+ ivyModuleDescriptor.addExtraInfo(scopeKey, dep.getScope());
+ }
// dependency management info is also used for version mediation of transitive dependencies
ivyModuleDescriptor.addDependencyDescriptorMediator(
ModuleId.newInstance(dep.getGroupId(), dep.getArtifactId()),
@@ -336,17 +343,34 @@
public String getVersion() {
return version;
}
+
+ public String getScope() {
+ return null;
+ }
}
private String getDefaultVersion(PomDependencyData dep) {
- String key = getDependencyMgtExtraInfoKey(dep.getGroupId(), dep.getArtifactId());
+ String key = getDependencyMgtExtraInfoKeyForVersion(dep.getGroupId(), dep.getArtifactId());
return (String) ivyModuleDescriptor.getExtraInfo().get(key);
}
+ private String getDefaultScope(PomDependencyData dep) {
+ String key = getDependencyMgtExtraInfoKeyForScope(dep.getGroupId(), dep.getArtifactId());
+ String result = (String) ivyModuleDescriptor.getExtraInfo().get(key);
+ if (result == null) {
+ result = "compile";
+ }
+ return result;
+ }
- private static String getDependencyMgtExtraInfoKey(String groupId, String artifaceId) {
+ private static String getDependencyMgtExtraInfoKeyForVersion(String groupId, String artifaceId) {
return DEPENDENCY_MANAGEMENT + EXTRA_INFO_DELIMITER + groupId
- + EXTRA_INFO_DELIMITER + artifaceId;
+ + EXTRA_INFO_DELIMITER + artifaceId + EXTRA_INFO_DELIMITER + "version";
+ }
+
+ private static String getDependencyMgtExtraInfoKeyForScope(String groupId, String artifaceId) {
+ return DEPENDENCY_MANAGEMENT + EXTRA_INFO_DELIMITER + groupId
+ + EXTRA_INFO_DELIMITER + artifaceId + EXTRA_INFO_DELIMITER + "scope";
}
private static String getPropertyExtraInfoKey(String propertyName) {
@@ -372,6 +396,32 @@
return ret;
}
+ public static List getDependencyManagements(ModuleDescriptor md) {
+ List result = new ArrayList();
+
+ for (Iterator iterator = md.getExtraInfo().entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ String key = (String) entry.getKey();
+ if ((key).startsWith(DEPENDENCY_MANAGEMENT)) {
+ String[] parts = key.split(EXTRA_INFO_DELIMITER);
+ if (parts.length != DEPENDENCY_MANAGEMENT_KEY_PARTS_COUNT) {
+ Message.warn("what seem to be a dependency management extra info "
+ + "doesn't match expected pattern: " + key);
+ } else {
+ String versionKey = DEPENDENCY_MANAGEMENT + EXTRA_INFO_DELIMITER + parts[1] + EXTRA_INFO_DELIMITER + parts[2] + EXTRA_INFO_DELIMITER + "version";
+ String scopeKey = DEPENDENCY_MANAGEMENT + EXTRA_INFO_DELIMITER + parts[1] + EXTRA_INFO_DELIMITER + parts[2] + EXTRA_INFO_DELIMITER + "scope";
+
+ String version = (String) md.getExtraInfo().get(versionKey);
+ String scope = (String) md.getExtraInfo().get(scopeKey);
+
+ result.add(new DefaultPomDependencyMgt(parts[1], parts[2], version, scope));
+ }
+ }
+ }
+
+ return result;
+ }
+
public void addExtraInfos(Map extraAttributes) {
for (Iterator it = extraAttributes.entrySet().iterator(); it.hasNext();) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java Wed May 21 16:01:47 2008
@@ -33,7 +33,6 @@
import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
-import org.apache.ivy.core.module.id.ModuleId;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.resolve.ResolveData;
import org.apache.ivy.core.resolve.ResolveEngine;
@@ -41,6 +40,7 @@
import org.apache.ivy.core.resolve.ResolvedModuleRevision;
import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
import org.apache.ivy.plugins.parser.ParserSettings;
+import org.apache.ivy.plugins.parser.m2.PomReader.PomPluginElement;
import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorWriter;
import org.apache.ivy.plugins.repository.Resource;
import org.apache.ivy.plugins.repository.url.URLResource;
@@ -208,13 +208,9 @@
mdBuilder.addExtraInfos(parentDescr.getExtraInfo());
// add dependency management info from parent
- Map depMgt = PomModuleDescriptorBuilder.getDependencyManagementMap(parentDescr);
- for (Iterator iterator = depMgt.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- ModuleId mid = (ModuleId) entry.getKey();
- String v = (String) entry.getValue();
- mdBuilder.addDependencyMgt(
- new DefaultPomDependencyMgt(mid.getOrganisation(), mid.getName(), v));
+ List depMgt = PomModuleDescriptorBuilder.getDependencyManagements(parentDescr);
+ for (Iterator it = depMgt.iterator(); it.hasNext();) {
+ mdBuilder.addDependencyMgt((PomDependencyMgt) it.next());
}
// add plugins from parent
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java?rev=658922&r1=658921&r2=658922&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java Wed May 21 16:01:47 2008
@@ -258,6 +258,11 @@
return replaceProps(val);
}
+ public String getScope() {
+ String val = getFirstChildText(depElement , SCOPE);
+ return replaceProps(val);
+ }
+
}
public List /* <PomPluginElement> */ getPlugins() {
@@ -303,6 +308,10 @@
return replaceProps(val);
}
+ public String getScope() {
+ return null; // not used
+ }
+
}
@@ -315,11 +324,7 @@
public String getScope() {
String val = getFirstChildText(depElement , SCOPE);
- if (val == null) {
- return "compile";
- } else {
- return replaceProps(val);
- }
+ return replaceProps(val);
}
public String getClassifier() {