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