Skip to content

Commit 053193f

Browse files
committed
Do not include partest and it's dependencies in generated pom.
Define custom Ivy configuration that contains all dependencies of partest (and partest itself) and make sure that this configuration is not considered when pom is generated. Remove the comment about significance of dependency order declaration. Given the fact that we excluded conflicting, transitive dependencies and all partest dependencies are isolated from regular dependencies the situation is much better.
1 parent aefc6b9 commit 053193f

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

build.sbt

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,39 @@ TestKeys.includeTestDependencies := true
8383

8484
libraryDependencies ++= Seq("junit" % "junit" % "4.11" % "test", "com.novocode" % "junit-interface" % "0.10" % "test")
8585

86+
// Define custom Ivy configuration called "partest". Ivy configuration is analogous to Maven scope
87+
// and allows to group dependencies together, see:
88+
// http://www.scala-sbt.org/release/docs/Detailed-Topics/Library-Management#configurations
89+
// We define custom configuration so we can resolve partest through Ivy from Maven repository.
90+
// However, by putting partest dependency in custom configuration we can make sure that
91+
// it doesn't interfere with any other dependencies. Also, we can make sure that dependencies
92+
// resolved in partest configuration NOT included in generated pom. See makePomConfiguration
93+
// setting we define below.
94+
val partestConfiguration = config("partest")
95+
96+
// Define configuration to be used to assemble the classpath for compiling and running
97+
// tests. We define it as an union of default test configuration (scope in Maven's speak)
98+
// and partest configuration.
99+
val testWithPartestConfiguration = Configurations.Test.extend(partestConfiguration)
100+
101+
// register both configurations we defined so they are processed by `update` command
102+
ivyConfigurations ++= Seq(partestConfiguration, testWithPartestConfiguration)
103+
104+
// override configuration used to assemble classpath for tests
105+
configuration in Test := testWithPartestConfiguration
106+
107+
// Define configurations (scopes in Maven's speak) that are taken into account when
108+
// generating pom. By default sbt sets MakePomConfiguration.configurations to None which is
109+
// interpreted as "include dependencies in all configurations". That would include
110+
// dependencies in partest configuration which is not what we want: see comment above
111+
// where we define the partest configuration.
112+
makePomConfiguration := makePomConfiguration.value.copy(configurations = Some(Configurations.default))
113+
86114
// default
87115
TestKeys.partestVersion := "1.0.0-RC6"
88116

89117
// the actual partest the interface calls into -- must be binary version close enough to ours
90118
// so that it can link to the compiler/lib we're using (testing)
91-
// NOTE: not sure why, but the order matters (maybe due to the binary version conflicts for xml/parser combinators pulled in for scaladoc?)
92119
libraryDependencies ++= (
93120
if (TestKeys.includeTestDependencies.value) {
94121
/**
@@ -111,8 +138,8 @@ libraryDependencies ++= (
111138
dep.exclude("org.scala-lang.modules", "scala-xml_2.11.0-M5").
112139
exclude("org.scala-lang.modules", "scala-xml_2.11.0-M4").
113140
exclude("org.scalacheck", "scalacheck_2.11.0-M5")
114-
Seq("org.scala-lang.modules" % "scala-partest-interface_2.11.0-M5" % "0.2" % "test",
115-
"org.scala-lang.modules" % "scala-partest_2.11.0-M5" % TestKeys.partestVersion.value % "test").
141+
Seq("org.scala-lang.modules" % "scala-partest-interface_2.11.0-M5" % "0.2" % "partest",
142+
"org.scala-lang.modules" % "scala-partest_2.11.0-M5" % TestKeys.partestVersion.value % "partest").
116143
map(excludeScalaXml)
117144
}
118145
else Seq.empty

0 commit comments

Comments
 (0)