Skip to content

Commit 08d66c4

Browse files
committed
Merge pull request sbt#12 from ScrapCodes/maven-user-props
Support passing user properties to pom.
2 parents 3749e8b + 893c4da commit 08d66c4

File tree

6 files changed

+21
-12
lines changed

6 files changed

+21
-12
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ object SbtPomKeys {
99
val mvnLocalRepository = SettingKey[File]("mvn-local-repository", "The location of the maven local repository we can use to cache artifacts.")
1010
val effectivePom = SettingKey[Model]("mvn-effective-pom", "Reads the maven effective pom.")
1111
val showEffectivePom = TaskKey[Unit]("show-effective-pom", "Displays the effective pom from maven.")
12+
val mavenUserProperties = SettingKey[Map[String, String]]("maven-user-properties","A map of user properties to be applied")
1213
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object MavenHelper {
2222
def loadPomInSettings: Seq[Setting[_]]= Seq(
2323
pomLocation <<= baseDirectory apply (_ / "pom.xml"),
2424
mvnLocalRepository := defaultLocalRepo,
25-
effectivePom <<= (pomLocation, mvnLocalRepository, profiles) apply loadEffectivePom,
25+
effectivePom <<= (pomLocation, mvnLocalRepository, profiles, mavenUserProperties) apply loadEffectivePom,
2626
showEffectivePom <<= (pomLocation, effectivePom, streams) map showPom
2727
)
2828

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ class MvnPomResolver(system: RepositorySystem, localRepo: File) {
4242
}
4343

4444
def loadEffectivePom(pomFile: File, repositories: Seq[RemoteRepository],
45-
activeProfiles: Seq[String]): Model =
45+
activeProfiles: Seq[String], userPropsMap: Map[String, String]): Model =
4646
try {
47+
val userProperties = new java.util.Properties()
48+
userProperties.putAll(userPropsMap.asJava)
4749
val request = new DefaultModelBuildingRequest
4850
request setLocationTracking true
4951
request setProcessPlugins false
@@ -62,8 +64,6 @@ class MvnPomResolver(system: RepositorySystem, localRepo: File) {
6264
// TODO - Wrap in better exception...
6365
throw e
6466
}
65-
// TODO - Allow these to be specified...
66-
val userProperties = new java.util.Properties
6767

6868
lazy val systemProperties = {
6969
val props = new java.util.Properties

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ object MavenProjectHelper {
4343
case class SimpleProject(model: PomModel, dir: File) extends ProjectTree
4444

4545
def makeReactorProject(baseDir: File, overrideRootProjectName:Option[String] = None,
46-
profiles: Seq[String]): Seq[Project] = {
46+
profiles: Seq[String], userProps: Map[String, String]): Seq[Project] = {
4747
// First create a tree of how things aggregate.
48-
val tree = makeProjectTree(baseDir / "pom.xml", profiles)
48+
val tree = makeProjectTree(baseDir / "pom.xml", profiles, userProps)
4949
// Next flatten the list of all projects.
5050
val projects = allProjectsInTree(tree)
5151
// Create a mapping of all dependencies between projects.
@@ -117,9 +117,9 @@ object MavenProjectHelper {
117117
overrideName.getOrElse(pomName.getOrElse(directoryName))
118118
}
119119

120-
def makeProjectTree(pomFile: File, profiles: Seq[String]): ProjectTree = {
121-
val pom = loadEffectivePom(pomFile, profiles = profiles)
122-
val children = getChildProjectPoms(pom, pomFile) map (makeProjectTree(_, profiles))
120+
def makeProjectTree(pomFile: File, profiles: Seq[String], userProps: Map[String, String]): ProjectTree = {
121+
val pom = loadEffectivePom(pomFile, profiles = profiles, userProps = userProps)
122+
val children = getChildProjectPoms(pom, pomFile) map (makeProjectTree(_, profiles, userProps))
123123
if(children.isEmpty) SimpleProject(pom, pomFile.getParentFile)
124124
else AggregateProject(pom, pomFile.getParentFile, children)
125125
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,21 @@ import Project.Initialize
1111
trait PomBuild extends Build {
1212
import SbtPomKeys._
1313
import MavenHelper._
14+
1415
val profiles: Seq[String] = Seq()
1516

17+
/** These can be used to override properties in maven pom */
18+
val userPropertiesMap: Map[String, String] = Map.empty
19+
20+
override def settings = {
21+
super.settings ++ Seq(SbtPomKeys.profiles := profiles, SbtPomKeys.mavenUserProperties := userPropertiesMap)
22+
}
23+
1624
lazy val overrideRootProjectName:Option[String] = None
1725
override def projectDefinitions(baseDirectory: File): Seq[Project] = {
1826
// If we detect a maven parent pom, use it.
1927
if((baseDirectory / "pom.xml").exists)
20-
MavenProjectHelper.makeReactorProject(baseDirectory, overrideRootProjectName, profiles)
28+
MavenProjectHelper.makeReactorProject(baseDirectory, overrideRootProjectName, profiles, userPropertiesMap)
2129
else super.projectDefinitions(baseDirectory)
2230
}
2331
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ package object pom {
3737
(file(sys.props("user.home")) / ".m2" / "repository")
3838
}
3939

40-
def loadEffectivePom(pom: File, localRepo: File = defaultLocalRepo, profiles: Seq[String]) =
41-
MvnPomResolver(localRepo).loadEffectivePom(pom, Seq.empty, profiles)
40+
def loadEffectivePom(pom: File, localRepo: File = defaultLocalRepo, profiles: Seq[String], userProps: Map[String, String]) =
41+
MvnPomResolver(localRepo).loadEffectivePom(pom, Seq.empty, profiles, userProps)
4242
}

0 commit comments

Comments
 (0)