Showing posts with label Scala. Show all posts
Showing posts with label Scala. Show all posts

Simple Introduction to Scalaz

Scalaz is a great library to make your Scala code more compact and to reduce some boilerplates. But getting started with it requires considerable effort. With its large collection of different operator and very functional nature most people are afraid to use it. Specially for people like me who are with more imperative programming background, it is not easy to get familiar with scalaz.

Recently InfoQ published a presentation named "Scalaz for Rest of us" by Adam Rosien, which introduces some basic building blocks of scalaz. Explanations are really simple and will help you to shed your fears on scalaz.

 

Exclude resource files from jar file created with SBT

I use SBT to build my scala projects. In addition to scala source files I have some resource files in my project. Those are some configuration files and localization resource files.

When I build the jar file using SBT package command all of those resource files also get included in the jar file. When those resource files are included inside the jar, modifying them becomes difficult. I have to extract the jar file, edit them and create the jar file again.

Ideal way of handling resource files are not to include them in the jar file, rather keep them separately and include them in the class path when running the application. How to exclude them from SBT package task was the problem I had. After some googling I found out that this can be achieved by including mapping task in the build. Following is sample build file which uses mapping to exclude various types of resource files.


val excludeFileRegx = """(.*?)\.(properties|props|conf|dsl|txt|xml)$""".r

  lazy val myapp = Project(id = "myapp", base = file("myapp"),
    settings = baseSettings ++ Seq(
      name := "My App",
      mappings in (Compile, packageBin) ~= { (ms: Seq[(File, String)]) =>
        ms filter {
          case (file, toPath)  =>{
            val shouldExclude = excludeFileRegx.pattern.matcher(file.getName).matches
           // println("===========" + file + "  " + shouldExclude)
            !shouldExclude
          }
        }
      },
        libraryDependencies ++= Seq (dispatch),
      libraryDependencies ++= testDependencies))