From 0ac485feb7457f6cf87788cdaefee75e6b5b7196 Mon Sep 17 00:00:00 2001 From: David Pratt Date: Thu, 5 Jun 2014 18:11:37 -0500 Subject: [PATCH 1/3] Add 'scala-jar' to the list of jar artifacts. The CustomPomParser has a hard-coded list of 'blessed' Maven POM packaging types that are actually packaged as jar files, but Ivy incorrectly maps the file extension. This patch allows artifacts published with the 'scala-jar' packaging to be properly resolved and used in an SBT project. --- ivy/src/main/scala/sbt/CustomPomParser.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/CustomPomParser.scala b/ivy/src/main/scala/sbt/CustomPomParser.scala index 5e0deb7c4..bcb8a2476 100644 --- a/ivy/src/main/scala/sbt/CustomPomParser.scala +++ b/ivy/src/main/scala/sbt/CustomPomParser.scala @@ -37,7 +37,7 @@ object CustomPomParser { private[this] val unqualifiedKeys = Set(SbtVersionKey, ScalaVersionKey, ExtraAttributesKey, ApiURLKey) // packagings that should be jars, but that Ivy doesn't handle as jars - val JarPackagings = Set("eclipse-plugin", "hk2-jar", "orbit") + val JarPackagings = Set("eclipse-plugin", "hk2-jar", "orbit", "scala-jar") val default = new CustomPomParser(PomModuleDescriptorParser.getInstance, defaultTransform) private[this] val TransformedHashKey = "e:sbtTransformHash" From 2ceb4f7d72e8ee6e98d69cc79cb10f4653908394 Mon Sep 17 00:00:00 2001 From: David Pratt Date: Sat, 7 Jun 2014 20:58:31 -0500 Subject: [PATCH 2/3] Add a unit test for the 'scala-jar' mapping. --- .../test-artifact-1.0.0-SNAPSHOT.jar | Bin 0 -> 2058 bytes .../test-artifact-1.0.0-SNAPSHOT.pom | 15 +++++++ ivy/src/test/scala/CustomPomParserTest.scala | 37 ++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.jar create mode 100644 ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.pom create mode 100644 ivy/src/test/scala/CustomPomParserTest.scala diff --git a/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.jar b/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..e02011810ce3f45629cfccac504df582a2624858 GIT binary patch literal 2058 zcmWIWW@h1H0D(u7j=O*vP=XUk`?`iW>U#RQ=?6fSaWFgtD*Ll&_WvB9bTbf(AS?5A z^z(Fc4Gz)sb^Gjl=CqHuuHHpnZ(Xf(XU=a9GPq*=;AxT8*)y6KOIK|P^3c@q($Q?} zSn{H3X-ad*jMtJ!W=nl4vJ_vcHf_nW22m?96}9vwT0hjLEq$gb@mlgF<5Su0NybK} zgSrKlu|HW7HbqSPfJ(*Aik%EF*D-)y2Xqh|umD-f`MGfSW2yjo6QrUfwYUVX4C2k7 z8Haw@FfuSa0AfjGWge+HIr-uFML8*Y$vKI|#km2ey_g*Z))@AmUAMZk^W$F|j!t&* z^Md+K6%ipFM?R+*AK~0=y=kUK-84B7n;(pIQ*Ib{@q5Vcda>%=tap|FD{7ewI^Hs* z>ik%-IPhRngW5D3o$8204f&Hkvy$7KR^Lt5nD?SFVZ|{c;pdaL=zr3_7k=bQ^4x-} zk9ThQY947~UUcR{kMLYKw;taTwJDdbTZK3Coz$Ez>3repWE;Wdm-<5Lt@+&k^tFEo z__#qTiT5?n!pY_D=Dtf*KBBfwLMm7;VMS!K$HyFr*e~u%hW}T*JA9*K3g2bn1pOb;Z@F(7A&NFP<=S%K?U$I|yr*u#Hhi!49b`h6Dv|g`BI<$PvnKv2hOcwiPeeF;En13W= z$=#a%?-IPz)GI}fFS!;Ivi?xS{dxVYEOixu3%nNJe%ATi=lTiG*Bm~6GlCvJVNX4G z+Q3KM_d%A>fp@!$#l9^$`Z+1uCa;V|&EDYO1OF(m&}Z&h95GKSI_iJ9{Rm2At}!|k zzudBMr4|R5`JeUH_0sY54fI$Q^1)Zf`|RT&K0lqn4_aq~4Gh8!wrnsm+Gb=B zR8YnlXkcVu@=yy}Hkn>AzF>TT_ggU!$F~ps554qH>Fa**+30)j{8epFUA>21I$9@v zynXZ-yBdG&GO!Z|mN<+|BFwl8PM{BfK!D+`BZ!8lVuUvA1t~}|2rOw-2a<4YNX06` z1k9ogRMx2-CQvkq?*&;M&lO zMr8M5%iu8E|Nn1fLh>;zyTjaonRP)K9-(<1re>t&2_93>ivyUM91PeB z1emEy8a0?Pyajg|s+rK@0TE)@a|XibDqw`e(+DKQ@EDEACjs89Y#>v(fN(F+%jT>g F9sr{cle_=` literal 0 HcmV?d00001 diff --git a/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.pom b/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.pom new file mode 100644 index 000000000..7884c5684 --- /dev/null +++ b/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.pom @@ -0,0 +1,15 @@ + + + 4.0.0 + + com.test + test-artifact + 1.0.0-SNAPSHOT + scala-jar + + + UTF-8 + + + diff --git a/ivy/src/test/scala/CustomPomParserTest.scala b/ivy/src/test/scala/CustomPomParserTest.scala new file mode 100644 index 000000000..1bc39a120 --- /dev/null +++ b/ivy/src/test/scala/CustomPomParserTest.scala @@ -0,0 +1,37 @@ +import java.io.File +import org.apache.ivy.core.module.descriptor.{ Artifact => IvyArtifact } +import org.apache.ivy.core.module.id.ModuleRevisionId +import org.apache.ivy.core.resolve.ResolveOptions +import org.specs2.mutable.Specification +import sbt._ +import IO.withTemporaryDirectory + +object CustomPomParserTest extends Specification { + + "CustomPomParser" should { + "resolve an artifact with packaging 'scala-jar' as a regular jar file." in { + val log = ConsoleLogger() + withTemporaryDirectory { cacheDir => + val repoUrl = getClass.getResource("/test-maven-repo") + val local = MavenRepository("Test Repo", repoUrl.toExternalForm) + val paths = new IvyPaths(new File("."), Some(cacheDir)) + val conf = new InlineIvyConfiguration(paths, Seq(local), Nil, Nil, false, None, Seq("sha1", "md5"), None, log) + val ivySbt = new IvySbt(conf) + val resolveOpts = new ResolveOptions().setConfs(Array("default")) + val mrid = ModuleRevisionId.newInstance("com.test", "test-artifact", "1.0.0-SNAPSHOT") + + val resolveReport = ivySbt.withIvy(log) { ivy => + ivy.resolve(mrid, resolveOpts, true) + } + + resolveReport.hasError must beFalse + resolveReport.getArtifacts.size() must beEqualTo(1) + val artifact: IvyArtifact = resolveReport.getArtifacts.asInstanceOf[java.util.List[IvyArtifact]].get(0) + artifact.getModuleRevisionId must beEqualTo(mrid) + artifact.getExt must beEqualTo("jar") + } + + } + } + +} From 0bb9be34dfa63f844ec169b7d95da2d7d028a7f5 Mon Sep 17 00:00:00 2001 From: David Pratt Date: Mon, 9 Jun 2014 13:54:20 -0500 Subject: [PATCH 3/3] Make jar artifact a 0-byte file. --- .../test-artifact-1.0.0-SNAPSHOT.jar | Bin 2058 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.jar b/ivy/src/test/resources/test-maven-repo/com/test/test-artifact/1.0.0-SNAPSHOT/test-artifact-1.0.0-SNAPSHOT.jar index e02011810ce3f45629cfccac504df582a2624858..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 2058 zcmWIWW@h1H0D(u7j=O*vP=XUk`?`iW>U#RQ=?6fSaWFgtD*Ll&_WvB9bTbf(AS?5A z^z(Fc4Gz)sb^Gjl=CqHuuHHpnZ(Xf(XU=a9GPq*=;AxT8*)y6KOIK|P^3c@q($Q?} zSn{H3X-ad*jMtJ!W=nl4vJ_vcHf_nW22m?96}9vwT0hjLEq$gb@mlgF<5Su0NybK} zgSrKlu|HW7HbqSPfJ(*Aik%EF*D-)y2Xqh|umD-f`MGfSW2yjo6QrUfwYUVX4C2k7 z8Haw@FfuSa0AfjGWge+HIr-uFML8*Y$vKI|#km2ey_g*Z))@AmUAMZk^W$F|j!t&* z^Md+K6%ipFM?R+*AK~0=y=kUK-84B7n;(pIQ*Ib{@q5Vcda>%=tap|FD{7ewI^Hs* z>ik%-IPhRngW5D3o$8204f&Hkvy$7KR^Lt5nD?SFVZ|{c;pdaL=zr3_7k=bQ^4x-} zk9ThQY947~UUcR{kMLYKw;taTwJDdbTZK3Coz$Ez>3repWE;Wdm-<5Lt@+&k^tFEo z__#qTiT5?n!pY_D=Dtf*KBBfwLMm7;VMS!K$HyFr*e~u%hW}T*JA9*K3g2bn1pOb;Z@F(7A&NFP<=S%K?U$I|yr*u#Hhi!49b`h6Dv|g`BI<$PvnKv2hOcwiPeeF;En13W= z$=#a%?-IPz)GI}fFS!;Ivi?xS{dxVYEOixu3%nNJe%ATi=lTiG*Bm~6GlCvJVNX4G z+Q3KM_d%A>fp@!$#l9^$`Z+1uCa;V|&EDYO1OF(m&}Z&h95GKSI_iJ9{Rm2At}!|k zzudBMr4|R5`JeUH_0sY54fI$Q^1)Zf`|RT&K0lqn4_aq~4Gh8!wrnsm+Gb=B zR8YnlXkcVu@=yy}Hkn>AzF>TT_ggU!$F~ps554qH>Fa**+30)j{8epFUA>21I$9@v zynXZ-yBdG&GO!Z|mN<+|BFwl8PM{BfK!D+`BZ!8lVuUvA1t~}|2rOw-2a<4YNX06` z1k9ogRMx2-CQvkq?*&;M&lO zMr8M5%iu8E|Nn1fLh>;zyTjaonRP)K9-(<1re>t&2_93>ivyUM91PeB z1emEy8a0?Pyajg|s+rK@0TE)@a|XibDqw`e(+DKQ@EDEACjs89Y#>v(fN(F+%jT>g F9sr{cle_=`