Archives par mot-clé : sbt

Liftweb sample bootstrap with sbt-plugins

Project source accessible in github at

  • Lift 2.5-M3
  • sbt-runMode (development, production)
  • sbt-js
  • sbt-less
  • modernizr
  • jquery 1.8.3
  • conditional runMode snippet
  • Twitter Bootstrap included to illustrate the use of sbt shell tasks


Optimize build process in development and production by:

  • conditional compilation js and style files depending on mode configuration.
  • concat file or not
  • compress file or not
  • simplify debugging by separating files in development mode.
  • test production output easily
  • Add custom sbt task like bash script and link to actions


Uses sbt-plugins plugins.

The current version 0.6-M1 does not work properly with jetty v8. To fix this problem, you can use my fork.

In a temp directory git clone git:// 
cd sbt-plugin
clean-cache publish-local 


css and less in main/css js, coffeescript, template in main/js

These directories will be filtered and copied to resourceManaged and include in webappResources.

main js and css name : « app »

naming convention

if filename contains (rules in build.sbt)

  • .p. == production
  • .d. == development
  • .a. == add to output directory, will be included in webAppRessources path and war package.(,,


  • app.a.d.css => main css file in development and this file will be included to output directory.
  • app.a.p.js => main js file in production and this file will be included to output directory.
  • app-part.less => not parsed if not import in any « a » file.


start in development:


start in production:


stop in development:


stop in production:


dst and pst will do a stop and a start.

compile css manually:


compile js manually:


clean output:

to clean only css xxmode:less::clean
to clean only js xxmode:js::clean 


already set in .sbtrc


    alias dst=;development:stop;development:start
    alias pst=;production:stop;production:start
    alias dsl= ;development:stop;~development:start
    alias psl= ;production:stop;~production:start
    alias dstop=development:stop
    alias dstart=development:start
    alias dc = development:compile
    alias pstop=production:stop
    alias pstart=production:start
    alias pc = production:compile
    alias dclean=development:clean
    alias pclean=production:clean
    alias djclean=development:js::clean
    alias dlclean=development:less::clean



make a clean before swapping modes.

For more details on sbt-plugins, refer to sbt-plugins Readme.

To go further, I recommend you mix this project with the lift-mongo.g8 produced by Tim Nelson.

Add Custom sbt Task (0.10+)

Simple Call Shell command in build.sbt:

TaskKey[Unit]("echo-simple") := {
List("sh", "-c", "(cd src/main/; echo \"YOUPI\")") ! ;

Without Name in build.scala, can be use as dependency:

import sbt.Project.Initialize    
val shEchoTask :  Initialize[Task[Unit]] = (streams) map {
        s => {
          List("sh", "-c", "(echo \"YOUPI\"") ! ;

use it in Build.sbt: <<= dependsOn(shEchoTask)

With Name in Build.scala, can be use as dependency:

  val shEchoTask = TaskKey[Unit]("echo-simple-task")

  val shEchoAction = (streams) map {
    s => {
     List("sh", "-c", "(echo \"YOUPI\"") ! ;"Echo")

  lazy val root = Project("root", file("."),
    settings = Defaults.defaultSettings ++ Seq(
    // Link task with action
      shEchoTask in Compile <<= shEchoAction,
    // add dependency
      compile in Compile <<= compile in Compile dependsOn (shEchoTask in Compile)

partial source: