scala - Is it possible to extend build.sbt syntax using implicit classes? -


i have big root sbt project contains several sub-projects. among project definitions there lot of code duplication trying remove.

for example every assembly project contains following code:

project   .enableplugins(sbtassembly.assemblyplugin)   .settings(     mainclass in compile := some(mainclassname),     assemblyjarname in assembly := jarname,     assemblymergestrategy in assembly := {       case pathlist("meta-inf", xs@_*) => mergestrategy.discard       case pathlist("sandbox.sc") => mergestrategy.discard       case pathlist("org", "joda", "time", xs@_*) => mergestrategy.first       case pathlist("reference.conf") => mergestrategy.concat       case x => mergestrategy.deduplicate     }   ) 

instead write that:

project   .assembly(classname, jarname) 

is possible achieve such syntax? know possible achieve syntax in typical scala file using implicit class. these way in sbt ?

yes, it's possible. create object(sbtprojectimplicits.scala) under project directory(depend on project structure), like:

your-project/    project/sbtprojectimplicits.scala    src/    ... 

and sbtprojectimplicits.scala object content maybe like:

object sbtprojectimplicits {     implicit class projectsettings(p: sbt.project) {       def assembly(classname: class, jarname): sbt.project = {         p.settings(          mainclass in compile := some(mainclassname),          assemblyjarname in assembly := jarname,          ...         )         p       }     } } 

so can in build.sbt like:

import sbtprojectimplicits._ project   .assembly(classname, jarname) 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -