Index: src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java =================================================================== --- src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java (revision 743456) +++ src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java (working copy) @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.ivy.Ivy; +import org.apache.ivy.core.module.descriptor.Artifact; import org.apache.ivy.core.module.descriptor.DependencyDescriptor; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.module.id.ModuleRevisionId; @@ -54,6 +55,33 @@ } PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF-8")); + + String packaging = null; + Map uniqueArtifacts = new HashMap (); + + Artifact[] artifacts = md.getAllArtifacts(); + + if (artifacts != null && artifacts.length > 0) { + for (int i = 0; i < artifacts.length; i++) { + if ((!"ivy".equals(artifacts[i].getType()) + && !"pom".equals(artifacts[i].getType()))) { + + String artifactKey = artifacts[i].getName(); + if (!uniqueArtifacts.containsKey(artifacts[i].getName()) + && !artifactKey.equals(md.getModuleRevisionId().getName())) { + uniqueArtifacts.put(artifactKey, artifacts[i]); + } + + if (packaging == null) packaging = artifacts[i].getExt(); + } + } + artifacts = null; + + if (uniqueArtifacts.size() > 0) { + packaging = "pom"; + } + } + try { out.println(""); if (licenseHeader != null) { @@ -72,19 +100,29 @@ out.println(" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 " + "http://maven.apache.org/maven-v4_0_0.xsd\">\n"); out.println(" 4.0.0"); - printModuleId(md, out); + printModuleId(md, out, packaging); printDependencies(md, mapping, out); + out.println(""); } finally { out.close(); } + + if (uniqueArtifacts.size() > 0) { + Artifact[] unique = new Artifact[uniqueArtifacts.size()]; + uniqueArtifacts.values().toArray(unique); + uniqueArtifacts = null; + + createChildDescriptors(md, licenseHeader, unique, output); + } } - private static void printModuleId(ModuleDescriptor md, PrintWriter out) { + private static void printModuleId(ModuleDescriptor md, PrintWriter out, + String packaging) { ModuleRevisionId mrid = md.getModuleRevisionId(); out.println(" " + mrid.getOrganisation() + ""); out.println(" " + mrid.getName() + ""); - out.println(" jar"); + out.println(" " + packaging + ""); if (mrid.getRevision() != null) { out.println(" " + mrid.getRevision() + ""); } @@ -92,7 +130,75 @@ out.println(" " + md.getHomePage() + ""); } } - + + private static void createChildDescriptors(ModuleDescriptor md, String licenseHeader, + Artifact[] artifacts, File output) throws IOException { + + String outputdir = output.getParent(); + for (int i = 0; i < artifacts.length; i++) { + + PrintWriter out = new PrintWriter(new OutputStreamWriter( + new FileOutputStream(outputdir + "/" + artifacts[i].getName() + ".pom"), "UTF-8")); + + try { + out.println(""); + if (licenseHeader != null) { + out.print(licenseHeader); + } + out.println(""); + out.println("\n"); + out.println(" 4.0.0"); + + printArtifactId(md, artifacts[i], out); + printParent(md, out); + + out.println(""); + } finally { + out.close(); + } + } + } + + private static void printParent(ModuleDescriptor md, PrintWriter out) { + ModuleRevisionId mrid = md.getModuleRevisionId(); + out.println(""); + out.println(" "); + out.println(" " + mrid.getOrganisation() + ""); + out.println(" " + mrid.getName() + ""); + if (mrid.getRevision() != null) { + out.println(" " + mrid.getRevision() + ""); + } + if (md.getHomePage() != null) { + out.println(" " + md.getHomePage() + ""); + } + out.println(" "); + } + + private static void printArtifactId(ModuleDescriptor md, Artifact artifact, + PrintWriter out) { + ModuleRevisionId mrid = md.getModuleRevisionId(); + out.println(" " + mrid.getOrganisation() + ""); + out.println(" " + artifact.getName() + ""); + out.println(" " + ((artifact.getExt() != null) ? + artifact.getExt() : artifact.getType()) + ""); + if (mrid.getRevision() != null) { + out.println(" " + mrid.getRevision() + ""); + } + if (md.getHomePage() != null) { + out.println(" " + md.getHomePage() + ""); + } + } + private static void printDependencies( ModuleDescriptor md, ConfigurationScopeMapping mapping, PrintWriter out) { DependencyDescriptor[] dds = md.getDependencies(); Index: test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java (revision 743456) +++ test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java (working copy) @@ -93,6 +93,19 @@ assertEquals(expected, wrote); } + public void testPackaging() throws Exception { + ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor( + new IvySettings(), getClass().getResource("test-packaging.pom"), false); + PomModuleDescriptorWriter.write(md, LICENSE, PomModuleDescriptorWriter.DEFAULT_MAPPING, _dest); + assertTrue(_dest.exists()); + + String wrote = FileUtil.readEntirely(new BufferedReader(new FileReader(_dest))).replaceAll( + "\r\n", "\n").replace('\r', '\n'); + String expected = readEntirely("test-write-packaging.xml") + .replaceAll("\r\n", "\n").replace('\r', '\n'); + assertEquals(expected, wrote); + } + private String readEntirely(String resource) throws IOException { return FileUtil.readEntirely(new BufferedReader(new InputStreamReader( PomModuleDescriptorWriterTest.class.getResource(resource).openStream()))); Index: test/java/org/apache/ivy/plugins/parser/m2/test-packaging.pom =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-packaging.pom (revision 743456) +++ test/java/org/apache/ivy/plugins/parser/m2/test-packaging.pom (working copy) @@ -24,9 +24,9 @@ war 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/test-write-packaging.xml =================================================================== --- test/java/org/apache/ivy/plugins/parser/m2/test-write-packaging.xml (revision 0) +++ test/java/org/apache/ivy/plugins/parser/m2/test-write-packaging.xml (revision 0) @@ -0,0 +1,33 @@ + + + + + + 4.0.0 + org.apache + test + war + 1.0 + http://ant.apache.org/ivy + \ No newline at end of file