From e484646c60eaca1f89921db7058d8927302d7226 Mon Sep 17 00:00:00 2001 From: Maarten Coene Date: Mon, 5 May 2014 20:56:51 +0000 Subject: [PATCH] IMPROVEMENT: ivy:makepom will generate an exclusion when transitive=false on a dependency (IVY-1470) git-svn-id: https://svn.apache.org/repos/asf/ant/ivy/core/trunk@1592628 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + .../parser/m2/PomModuleDescriptorWriter.java | 25 ++++++++--- .../m2/PomModuleDescriptorWriterTest.java | 15 +++++++ .../ivy/plugins/parser/m2/test-transitive.pom | 42 +++++++++++++++++++ .../ivy/plugins/parser/m2/test-transitive.xml | 24 +++++++++++ 5 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom create mode 100644 test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml diff --git a/CHANGES.txt b/CHANGES.txt index 572a09a1..b59693ef 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -144,6 +144,7 @@ for detailed view of each issue, please consult http://issues.apache.org/jira/br ===================================== - IMPROVEMENT: Add support for packed jar within an OSGi bundle - IMPROVEMENT: ModuleRules.getRule is O(n) leading to resolution slowness (IVY-1465) (Thanks to Zhong Wang aka Kewpie) +- IMPROVEMENT: ivy:makepom will generate an exclusion when transitive=false on a dependency (IVY-1470) - FIX: impossible to get artifacts when data has not been loaded. (IVY-1399) (Thanks to David Turner) - FIX: regression introduced by IVY-1457, dependency management wasn't properly handled introducing lots of resolution failures diff --git a/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java b/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java index 5e622888..5cd254ab 100644 --- a/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java +++ b/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriter.java @@ -228,7 +228,7 @@ public final class PomModuleDescriptorWriter { version = md.getModuleRevisionId().getRevision(); } printDependency(out, indent, groupId, dep.getArtifact(), version, dep.getType(), - dep.getClassifier(), dep.getScope(), dep.isOptional(), null); + dep.getClassifier(), dep.getScope(), dep.isOptional(), true, null); } // now print the dependencies listed in the ModuleDescriptor @@ -251,13 +251,15 @@ public final class PomModuleDescriptorWriter { String scope = mapping.getScope(dds[i].getModuleConfigurations()); boolean optional = mapping.isOptional(dds[i].getModuleConfigurations()); printDependency(out, indent, mrid.getOrganisation(), mrid.getName(), - mrid.getRevision(), type, classifier, scope, optional, excludes); + mrid.getRevision(), type, classifier, scope, optional, + dds[i].isTransitive(), excludes); } } else { String scope = mapping.getScope(dds[i].getModuleConfigurations()); boolean optional = mapping.isOptional(dds[i].getModuleConfigurations()); printDependency(out, indent, mrid.getOrganisation(), mrid.getName(), - mrid.getRevision(), null, null, scope, optional, excludes); + mrid.getRevision(), null, null, scope, optional, dds[i].isTransitive(), + excludes); } } @@ -270,7 +272,7 @@ public final class PomModuleDescriptorWriter { private static void printDependency(PrintWriter out, int indent, String groupId, String artifactId, String version, String type, String classifier, String scope, - boolean isOptional, ExcludeRule[] excludes) { + boolean isOptional, boolean isTransitive, ExcludeRule[] excludes) { indent(out, indent * 2); out.println(""); indent(out, indent * 3); @@ -295,7 +297,20 @@ public final class PomModuleDescriptorWriter { indent(out, indent * 3); out.println("true"); } - if (excludes != null) { + if (!isTransitive) { + indent(out, indent * 3); + out.println(""); + indent(out, indent * 4); + out.println(""); + indent(out, indent * 5); + out.println("*"); + indent(out, indent * 5); + out.println("*"); + indent(out, indent * 4); + out.println(""); + indent(out, indent * 3); + out.println(""); + } else if (excludes != null) { printExclusions(excludes, out, indent); } indent(out, indent * 2); diff --git a/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java b/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java index bebd6a75..d37a8695 100644 --- a/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java +++ b/test/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorWriterTest.java @@ -27,6 +27,7 @@ import junit.framework.TestCase; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.settings.IvySettings; +import org.apache.ivy.plugins.parser.ModuleDescriptorParserRegistry; import org.apache.ivy.util.FileUtil; public class PomModuleDescriptorWriterTest extends TestCase { @@ -121,6 +122,20 @@ public class PomModuleDescriptorWriterTest extends TestCase { assertEquals(expected, wrote); } + public void testTransitive() throws Exception { + ModuleDescriptor md = ModuleDescriptorParserRegistry.getInstance().parseDescriptor( + new IvySettings(), getClass().getResource("test-transitive.xml"), 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'); + System.out.println(wrote); + String expected = readEntirely("test-transitive.pom").replaceAll("\r\n", "\n").replace( + '\r', '\n'); + assertEquals(expected, wrote); + } + public void testPackaging() throws Exception { ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), getClass().getResource("test-packaging.pom"), false); diff --git a/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom b/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom new file mode 100644 index 00000000..f7237159 --- /dev/null +++ b/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.pom @@ -0,0 +1,42 @@ + + + + + 4.0.0 + apache + test-transitive + jar + 1.0 + + + apache + ivy + 1.0 + true + + + * + * + + + + + diff --git a/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml b/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml new file mode 100644 index 00000000..d95cb6df --- /dev/null +++ b/test/java/org/apache/ivy/plugins/parser/m2/test-transitive.xml @@ -0,0 +1,24 @@ + + + + + + +