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/19 00:25:23 UTC

svn commit: r657658 - in /ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2: PomModuleDescriptorBuilder.java PomModuleDescriptorParser.java PomReader.java

Author: maartenc
Date: Sun May 18 15:25:23 2008
New Revision: 657658

URL: http://svn.apache.org/viewvc?rev=657658&view=rev
Log:
Added quick-fix for IVY-633. I think it will solve most of the packaging problems, but we should work on a better solution.

Modified:
    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/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=657658&r1=657657&r2=657658&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 Sun May 18 15:25:23 2008
@@ -18,11 +18,14 @@
 package org.apache.ivy.plugins.parser.m2;
 
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.StringTokenizer;
 import java.util.Map.Entry;
 
 import org.apache.ivy.Ivy;
@@ -43,8 +46,10 @@
 import org.apache.ivy.plugins.matcher.PatternMatcher;
 import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
 import org.apache.ivy.plugins.parser.m2.PomReader.PomDependencyData;
+import org.apache.ivy.plugins.parser.m2.PomReader.PomPluginElement;
 import org.apache.ivy.plugins.repository.Resource;
 import org.apache.ivy.util.Message;
+import org.w3c.dom.Element;
 
 
 /**
@@ -202,8 +207,25 @@
 
 
     public void addArtifact(String artifactId, String packaging) {
+        String ext = packaging;
+
+        // TODO: we should refactor the following code into something more configurable
+
+        // if 'packaging == bundle' and if we use the 'maven-bundle-plugin', the
+        // type must be 'jar'
+        if ("bundle".equals(packaging)) {
+            for (Iterator it = getPlugins(ivyModuleDescriptor).iterator(); it.hasNext();) {
+                PomDependencyMgt plugin = (PomDependencyMgt) it.next();
+                if ("org.apache.felix".equals(plugin.getGroupId())
+                        && "maven-bundle-plugin".equals(plugin.getArtifaceId())) {
+                    ext = "jar";
+                    break;
+                }
+            }
+        }
+
         ivyModuleDescriptor.addArtifact("master", 
-                new DefaultArtifact(mrid, new Date(), artifactId, packaging, packaging));
+                new DefaultArtifact(mrid, new Date(), artifactId, ext, ext));
     }
 
 
@@ -267,6 +289,57 @@
             ExactPatternMatcher.INSTANCE,
             new OverrideDependencyDescriptorMediator(null, dep.getVersion()));
     }
+    
+    public void addPlugin(PomDependencyMgt plugin) {
+        String pluginValue = plugin.getGroupId() + EXTRA_INFO_DELIMITER + plugin.getArtifaceId() 
+                + EXTRA_INFO_DELIMITER + plugin.getVersion();
+        String pluginExtraInfo = (String) ivyModuleDescriptor.getExtraInfo().get("maven.plugins");
+        if (pluginExtraInfo == null) {
+            pluginExtraInfo = pluginValue;
+        } else {
+            pluginExtraInfo = pluginExtraInfo + "|" + pluginValue;
+        }
+        ivyModuleDescriptor.getExtraInfo().put("m:maven.plugins", pluginExtraInfo);
+    }
+    
+    public static List /*<PomDependencyMgt>*/ getPlugins(ModuleDescriptor md) {
+        List result = new ArrayList();
+        String plugins = (String) md.getExtraInfo().get("m:maven.plugins");
+        if (plugins == null) {
+            return new ArrayList();
+        }
+        String[] pluginsArray = plugins.split("\\|");
+        for (int i = 0; i < pluginsArray.length; i++) {
+            String[] parts = pluginsArray[i].split(EXTRA_INFO_DELIMITER);
+            result.add(new PomPluginElement(parts[0], parts[1], parts[2]));
+        }
+        
+        return result;
+    }
+    
+    private static class PomPluginElement implements PomDependencyMgt {
+        private String groupId;
+        private String artifactId;
+        private String version;
+        
+        public PomPluginElement(String groupId, String artifactId, String version) {
+            this.groupId = groupId;
+            this.artifactId = artifactId;
+            this.version = version;
+        }
+        
+        public String getGroupId() {
+            return groupId;
+        }
+
+        public String getArtifaceId() {
+            return artifactId;
+        }
+
+        public String getVersion() {
+            return version;
+        }
+    }
 
     private String getDefaultVersion(PomDependencyData dep) {
         String key = getDependencyMgtExtraInfoKey(dep.getGroupId(), dep.getArtifaceId());        

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=657658&r1=657657&r2=657658&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 Sun May 18 15:25:23 2008
@@ -24,6 +24,7 @@
 import java.text.ParseException;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.ivy.core.IvyContext;
@@ -215,6 +216,12 @@
                         mdBuilder.addDependencyMgt(
                             new DefaultPomDependencyMgt(mid.getOrganisation(), mid.getName(), v));
                     }
+                    
+                    // add plugins from parent
+                    List /*<PomDependencyMgt>*/ plugins = PomModuleDescriptorBuilder.getPlugins(parentDescr);
+                    for (Iterator it = plugins.iterator(); it.hasNext();) {
+                        mdBuilder.addPlugin((PomDependencyMgt) it.next());
+                    }
                 }
                 
                 for (Iterator it = domReader.getDependencyMgt().iterator(); it.hasNext();) {
@@ -233,6 +240,11 @@
                     }
                 }
                 
+                for (Iterator it = domReader.getPlugins().iterator(); it.hasNext();) {
+                    PomReader.PomPluginElement plugin = (PomReader.PomPluginElement) it.next();
+                    mdBuilder.addPlugin(plugin);
+                }
+                
                 mdBuilder.addArtifact(artifactId , domReader.getPackaging());
             }            
         } catch (SAXException e) {

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=657658&r1=657657&r2=657658&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 Sun May 18 15:25:23 2008
@@ -64,8 +64,8 @@
     private static final String DISTRIBUTION_MGT = "distributionManagement";
     private static final String RELOCATION = "relocation";
     private static final String PROPERTIES = "properties";
-    
-    
+    private static final String PLUGINS = "plugins";
+    private static final String PLUGIN = "plugin";
     
 
     private HashMap properties = new HashMap();
@@ -227,7 +227,6 @@
         return dependencies;
     }
 
-    
     public class PomDependencyMgtElement implements PomDependencyMgt {
         private final Element depElement;
         
@@ -261,6 +260,51 @@
         
     }
     
+    public List /* <PomPluginElement> */ getPlugins() {
+        LinkedList plugins = new LinkedList();
+
+        Element buildElement = getFirstChildElement(projectElement, "build");
+        if (buildElement == null) {
+            return plugins;
+        }
+        
+        Element pluginsElement = getFirstChildElement(buildElement, PLUGINS);
+        if (pluginsElement != null) {
+            NodeList childs = pluginsElement.getChildNodes();
+            for (int i = 0; i < childs.getLength(); i++) {
+                Node node = childs.item(i);
+                if (node instanceof Element && PLUGIN.equals(node.getNodeName())) {
+                    plugins.add(new PomPluginElement((Element) node));
+                }
+            }
+        }
+        return plugins;
+    }
+
+    public class PomPluginElement implements PomDependencyMgt {
+        private Element pluginElement;
+        
+        PomPluginElement(Element pluginElement) {
+            this.pluginElement = pluginElement; 
+        }
+        
+        public String getGroupId() {
+            String val = getFirstChildText(pluginElement , GROUP_ID);
+            return replaceProps(val);
+        }
+
+        public String getArtifaceId() {
+            String val = getFirstChildText(pluginElement , ARTIFACT_ID);
+            return replaceProps(val);
+        }
+
+        public String getVersion() {
+            String val = getFirstChildText(pluginElement , VERSION);
+            return replaceProps(val);
+        }
+        
+    }
+    
     
     public class PomDependencyData extends PomDependencyMgtElement {
         private final Element depElement;