sbt/project/build/SbtTemplateProject.scala

96 lines
4.3 KiB
Scala

import sbt._
class SbtTemplateProject(info: ProjectInfo) extends DefaultProject(info) with ProjectSupport {
}
trait ProjectSupport extends ModuleIdDynamifactory {
self: DefaultProject =>
/** Default "dynamic revision" to use with ivy.
* See [[http://www.jaya.free.fr/ivy/doc/ivyfile/dependency.html]].
* Likely alternatives: latest.milestone, latest.release
*/
def dynamicRevision = "latest.integration"
/** Repositories. Comment in or out to taste.
*/
val localMaven = "Local Maven" at "file://"+Path.userHome+"/.m2/repository"
val localIvy = "Local Ivy" at "file://"+Path.userHome+"/.ivy2/local"
val sonatype = "Sonatype" at "https://oss.sonatype.org/content/groups/public"
val scalaToolsSnapshots = "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/"
val jboss = "JBoss Repo" at "http://repository.jboss.org/maven2"
protected implicit lazy val implicitTransform: ArtifactTransform =
ArtifactTransform(inScope("test"), withSources)
/*** Libraries ***/
val specs: ModuleID = "org.scala-tools.testing" %% "specs"
val scalacheck: ModuleID = "org.scala-tools.testing" %% "scalacheck"
// val ant: ModuleID = "org.apache.ant" % "ant"
// val asmAll: ModuleID = "asm" % "asm-all" withSources()
// val commonsVFS: ModuleID = "org.apache.commons" % "commons-vfs-project"
// val easymock: ModuleID = "org.easymock" % "easymock"
// val guava: ModuleID = "com.google.guava" % "guava"
// val ivy: ModuleID = "org.apache.ivy" % "ivy"
// val jdt: ModuleID = "org.eclipse.jdt" % "core" notTransitive()
// val jetty: ModuleID = "org.mortbay.jetty" % "jetty"
// val jmock: ModuleID = "org.jmock" % "jmock"
// val jodaTime: ModuleID = "joda-time" % "joda-time"
// val liftJson: ModuleID = "net.liftweb" %% "lift-json"
// val maven: ModuleID = "org.apache.maven" % "maven-ant-tasks"
// val scalaARM: ModuleID = "com.github.jsuereth.scala-arm" %% "scala-arm" withSources()
// val scalaImproving: ModuleID = "org.improving" %% "scala-improving"
// val scalaSTM: ModuleID = "org.scala-tools" %% "scala-stm"
// val scalariform: ModuleID = "org.scalariform" %% "scalariform"
// val scalazCore: ModuleID = "org.scalaz" %% "scalaz-core" withSources()
// val scalazHttp: ModuleID = "org.scalaz" %% "scalaz-http" withSources()
// val slf4s: ModuleID = "com.weiglewilczek.slf4s" %% "slf4s" withSources()
}
trait ModuleIdDynamifactory extends Dynamifactory {
self: DefaultProject =>
protected type DepId = GroupArtifactID
protected type DepOut = ModuleID
protected def finishDependency(in: GroupArtifactID, revision: String): ModuleID = in % revision
protected implicit lazy val implicitRevision: ArtifactRevision =
ArtifactRevision(_ => dynamicRevision)
protected def inScope(scope: String): DepFn = _ % scope
protected def withSources: DepFn = _.withSources()
protected def intransitive: DepFn = _.intransitive()
protected def withJavadoc: DepFn = _.withJavadoc
protected def withRevision(newRevision: String): DepFn = (m: ModuleID) => {
ModuleID(m.organization, m.name, newRevision, m.configurations, m.isChanging, m.isTransitive, m.explicitArtifacts, m.extraAttributes)
}
}
trait Dynamifactory {
protected type DepId
protected type DepOut
protected type DepFn = DepOut => DepOut
protected def dynamicRevision: String
protected def finishDependency(in: DepId, revision: String): DepOut
case class ArtifactRevision(revisionFn: DepId => String) {
}
case class ArtifactTransform(fns: DepFn*) {
def apply(x: DepOut): DepOut = if (fns.isEmpty) x else fns.reduceLeft(_ andThen _)(x)
}
case class ArtifactConfig(rev: ArtifactRevision, transform: ArtifactTransform) { }
protected implicit def autoassembleConfig(implicit rev: ArtifactRevision, transform: ArtifactTransform): ArtifactConfig =
ArtifactConfig(rev, transform)
protected implicit def autoconfigureDependencies(in: DepId)(implicit config: ArtifactConfig): DepOut = {
val ArtifactConfig(ArtifactRevision(revisionFn), transform) = config
transform(finishDependency(in, revisionFn(in)))
}
}