Skip to content

Commit 9080118

Browse files
committed
Check for scope if test assign test scope to interdependent projects.
1 parent 07e2e6a commit 9080118

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

src/main/scala/com/typesafe/sbt/pom/MavenProjectHelper.scala

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ object MavenProjectHelper {
4141
}
4242
case class AggregateProject(model: PomModel, dir: File, children: Seq[ProjectTree]) extends ProjectTree
4343
case class SimpleProject(model: PomModel, dir: File) extends ProjectTree
44-
44+
case class ProjectDep(x: ProjectTree, isTestScoped: Boolean)
45+
4546
def makeReactorProject(baseDir: File, overrideRootProjectName:Option[String] = None,
4647
profiles: Seq[String], userProps: Map[String, String]): Seq[Project] = {
4748
// First create a tree of how things aggregate.
@@ -51,7 +52,7 @@ object MavenProjectHelper {
5152
// Create a mapping of all dependencies between projects.
5253
val depMap = makeDependencyMap(projects)
5354
// Helper to look up dependencies in the presence of absences.
54-
def getDepsFor(project: ProjectTree): Seq[ProjectTree] =
55+
def getDepsFor(project: ProjectTree): Seq[ProjectDep] =
5556
depMap.getOrElse(project, Nil)
5657
// Now, sort projects in an order that we can create them.
5758
val sorted: Seq[ProjectTree] =
@@ -61,17 +62,18 @@ object MavenProjectHelper {
6162
case _ => Nil
6263
}
6364
val deps = getDepsFor(project)
64-
aggregates ++ deps
65+
aggregates ++ deps.map(_.x)
6566
}
6667
def makeProjects(toMake: Seq[ProjectTree], made: Map[ProjectTree, Project] = Map.empty): Seq[Project] =
6768
toMake match {
6869
case current :: rest =>
6970
// Make a project, and add it to the stack
70-
val depProjects: Seq[Project] =
71+
val depProjects: Seq[(Project, Boolean)] =
7172
for {
7273
dep <- getDepsFor(current)
73-
depProject <- made.get(dep)
74-
} yield depProject
74+
depProject <- made.get(dep.x)
75+
isTestScoped = dep.isTestScoped
76+
} yield depProject -> isTestScoped
7577
val aggregates: Seq[Project] =
7678
current match {
7779
case AggregateProject(_,_, children) =>
@@ -81,28 +83,33 @@ object MavenProjectHelper {
8183
} yield depProject
8284
case _ => Nil
8385
}
86+
87+
def projectToClasspathDep(x: (Project, Boolean)): ClasspathDep[ProjectReference] = x match {
88+
case (project, true) => project % "test->test"
89+
case (project, false) => project
90+
}
91+
8492
// TODO - Configure debugging output....
8593
val currentProject = (
8694
Project(makeProjectName(current.model,overrideRootProjectName),current.dir)
8795
// First pull in settings from pom
8896
settings(useMavenPom:_*)
8997
// Now update depends on relationships
90-
dependsOn(depProjects.map(x =>x: ClasspathDep[ProjectReference]):_*)
98+
dependsOn(depProjects.map(x => projectToClasspathDep(x)):_*)
9199
// Now fix aggregate relationships
92100
aggregate(aggregates.map(x => x:ProjectReference):_*)
93101
// Now remove any inter-project dependencies we pulled in from the maven pom.
94102
// TODO - Maybe we can fix the useMavenPom settings so we don't need to
95103
// post-filter artifacts?
96104
settings(
97105
Keys.libraryDependencies <<= Keys.libraryDependencies apply { deps =>
98-
val depIds = getDepsFor(current).map(_.id).toSet
106+
val depIds = getDepsFor(current).map(_.x.id).toSet
99107
deps filterNot { dep =>
100108
val id = makeId(dep.organization, dep.name, dep.revision)
101109
depIds contains id
102110
}
103111
}
104112
)
105-
106113
)
107114
makeProjects(rest, made + (current -> currentProject))
108115
case Nil => made.values.toSeq
@@ -132,16 +139,18 @@ object MavenProjectHelper {
132139
Seq(agg) ++ agg.children.flatMap(allProjectsInTree)
133140
}
134141
// Detects dependencies between projects
135-
def makeDependencyMap(projects: Seq[ProjectTree]): Map[ProjectTree, Seq[ProjectTree]] = {
142+
def makeDependencyMap(projects: Seq[ProjectTree]): Map[ProjectTree, Seq[ProjectDep]] = {
136143
val findDeps =
137144
for(project <- projects) yield {
138145
val deps =
139146
for {
140147
dep <- Option(project.model.getDependencies).map(_.asScala).getOrElse(Nil)
141148
depId = makeId(dep.getGroupId, dep.getArtifactId, dep.getVersion)
149+
isTestScope = dep.getScope == "test"
142150
pdep <- projects
143151
if pdep.id == depId
144-
} yield pdep
152+
} yield ProjectDep(pdep, isTestScope)
153+
145154
project -> deps
146155
}
147156
findDeps.toMap

0 commit comments

Comments
 (0)