Index: test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-type.xml =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-type.xml (revision 0) +++ test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-type.xml (revision 0) @@ -0,0 +1,38 @@ + + + + + 4.0.0 + org.apache + test + jar + 1.0 + http://ant.apache.org/ivy + + + commons-logging + commons-logging + 1.0.4 + dll + compile + + + Index: test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-type.pom =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-type.pom (revision 1150222) +++ test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-type.pom (working copy) @@ -23,10 +23,10 @@ test Test Module for Ivy M2 parsing 1.0 - http://ivy.jayasoft.org/ + http://ant.apache.org/ivy - Jayasoft - http://www.jayasoft.org/ + Apache + http://ant.apache.org/ivy Index: test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java (revision 1150222) +++ test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java (working copy) @@ -80,6 +80,32 @@ assertEquals(expected, wrote); } + public void testDependenciesWithType() throws Exception { + ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor( + new IvySettings(), getClass().getResource("test-dependencies-with-type.pom"), false); + PomModuleDescriptorWriter.write(md, _dest, getWriterOptions()); + assertTrue(_dest.exists()); + + String wrote = FileUtil.readEntirely(new BufferedReader(new FileReader(_dest))).replaceAll( + "\r\n", "\n").replace('\r', '\n'); + String expected = readEntirely("test-write-dependencies-with-type.xml") + .replaceAll("\r\n", "\n").replace('\r', '\n'); + assertEquals(expected, wrote); + } + + public void testDependenciesWithClassifier() throws Exception { + ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor( + new IvySettings(), getClass().getResource("test-dependencies-with-classifier.pom"), false); + PomModuleDescriptorWriter.write(md, _dest, getWriterOptions()); + assertTrue(_dest.exists()); + + String wrote = FileUtil.readEntirely(new BufferedReader(new FileReader(_dest))).replaceAll( + "\r\n", "\n").replace('\r', '\n'); + String expected = readEntirely("test-write-dependencies-with-classifier.xml") + .replaceAll("\r\n", "\n").replace('\r', '\n'); + assertEquals(expected, wrote); + } + public void testOptional() throws Exception { ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), getClass().getResource("test-optional.pom"), false); Index: test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-classifier.xml =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-classifier.xml (revision 0) +++ test/java/org/apache/ivy/plugins/parser/m2/test-write-dependencies-with-classifier.xml (revision 0) @@ -0,0 +1,38 @@ + + + + + 4.0.0 + org.apache + test + jar + 1.0 + http://ant.apache.org/ivy + + + commons-logging + commons-logging + 1.0.4 + asl + compile + + + Index: test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-classifier.pom =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-classifier.pom (revision 1150222) +++ test/java/org/apache/ivy/plugins/parser/m2/test-dependencies-with-classifier.pom (working copy) @@ -23,10 +23,10 @@ test Test Module for Ivy M2 parsing 1.0 - http://ivy.jayasoft.org/ + http://ant.apache.org/ivy - Jayasoft - http://www.jayasoft.org/ + Apache + http://ant.apache.org/ivy Index: src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java =================================================================== --- src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java (revision 1150222) +++ src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java (working copy) @@ -35,6 +35,7 @@ import org.apache.ivy.core.IvyContext; import org.apache.ivy.core.IvyPatternHelper; import org.apache.ivy.core.module.descriptor.Artifact; +import org.apache.ivy.core.module.descriptor.DependencyArtifactDescriptor; import org.apache.ivy.core.module.descriptor.DependencyDescriptor; import org.apache.ivy.core.module.descriptor.ExcludeRule; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; @@ -217,41 +218,15 @@ // print the extra dependencies first for (Iterator it = extraDeps.iterator(); it.hasNext(); ) { PomWriterOptions.ExtraDependency dep = (ExtraDependency) it.next(); - - indent(out, indent * 2); - out.println(""); String groupId = dep.getGroup(); if (groupId == null) { groupId = md.getModuleRevisionId().getOrganisation(); } - indent(out, indent * 3); - out.println("" + groupId + ""); - indent(out, indent * 3); - out.println("" + dep.getArtifact() + ""); String version = dep.getVersion(); if (version == null) { version = md.getModuleRevisionId().getRevision(); } - indent(out, indent * 3); - out.println("" + version + ""); - if (dep.getType() != null) { - indent(out, indent * 3); - out.println("" + dep.getType() + ""); - } - if (dep.getClassifier() != null) { - indent(out, indent * 3); - out.println("" + dep.getClassifier() + ""); - } - if (dep.getScope() != null) { - indent(out, indent * 3); - out.println("" + dep.getScope() + ""); - } - if (dep.isOptional()) { - indent(out, indent * 3); - out.println("true"); - } - indent(out, indent * 2); - out.println(""); + printDependency(out, indent, groupId, dep.getArtifact(), version, dep.getType(), dep.getClassifier(), dep.getScope(), dep.isOptional(), null); } // now print the dependencies listed in the ModuleDescriptor @@ -262,29 +237,21 @@ for (int i = 0; i < dds.length; i++) { ModuleRevisionId mrid = dds[i].getDependencyRevisionId(); - indent(out, indent * 2); - out.println(""); - indent(out, indent * 3); - out.println("" + mrid.getOrganisation() + ""); - indent(out, indent * 3); - out.println("" + mrid.getName() + ""); - indent(out, indent * 3); - out.println("" + mrid.getRevision() + ""); - String scope = mapping.getScope(dds[i].getModuleConfigurations()); - if (scope != null) { - indent(out, indent * 3); - out.println("" + scope + ""); + ExcludeRule[] excludes = null; + if(dds[i].canExclude()){ + excludes = dds[i].getAllExcludeRules(); } - if (mapping.isOptional(dds[i].getModuleConfigurations())) { - indent(out, indent * 3); - out.println("true"); + DependencyArtifactDescriptor[] dads = dds[i].getAllDependencyArtifacts(); + if(dads.length > 0) { + for (int j = 0; j < dads.length; j++) { + String type = dads[j].getType(); + String classifier = dads[j].getExtraAttribute("classifier"); + printDependency(out, indent, mrid.getOrganisation(), mrid.getName(), mrid.getRevision(), type, classifier, mapping.getScope(dds[i].getModuleConfigurations()), mapping.isOptional(dds[i].getModuleConfigurations()), excludes); + } } - - if(dds[i].canExclude()){ - printExclusions(dds[i].getAllExcludeRules(), out, indent); + else { + printDependency(out, indent, mrid.getOrganisation(), mrid.getName(), mrid.getRevision(), null, null, mapping.getScope(dds[i].getModuleConfigurations()), mapping.isOptional(dds[i].getModuleConfigurations()), excludes); } - indent(out, indent * 2); - out.println(""); } if (printDependencies) { @@ -294,6 +261,40 @@ } } + private static void printDependency(PrintWriter out, int indent, String groupId, String artifactId, String version, String type, String classifier, String scope, boolean isOptional, ExcludeRule[] excludes) { + indent(out, indent * 2); + out.println(""); + indent(out, indent * 3); + out.println("" + groupId + ""); + indent(out, indent * 3); + out.println("" + artifactId + ""); + indent(out, indent * 3); + out.println("" + version + ""); + if(type != null && !type.equals("jar")) { + indent(out, indent * 3); + out.println("" + type + ""); + } + if(classifier != null) { + indent(out, indent * 3); + out.println("" + classifier + ""); + } + if (scope != null) { + indent(out, indent * 3); + out.println("" + scope + ""); + } + if (isOptional) { + indent(out, indent * 3); + out.println("true"); + } + + if(excludes != null){ + printExclusions(excludes, out, indent); + } + indent(out, indent * 2); + out.println(""); + + } + private static void printExclusions(ExcludeRule[] exclusions, PrintWriter out, int indent ){ indent(out, indent * 3); out.println("");