1
votes

I have an sbt play2 project that I want to configure for eclipse, to include both a Scala nature and Java nature automatically(in the generated .project file). I can do this inside of eclipse by manually adding the nature, but I want the eclipse plugin to do this for me automatically.

The plugin's default behavior is to add both natures UNLESS you include javaCore in your appDependencies, which I need to do. When you include javaCore, mainLang is set automatically to JAVA, and the Scala Nature is excluded in the configuration.

see: https://github.com/playframework/Play20/wiki/Migration under Changes to the Build File

Is there a way to override mainLang and set it to Scala? Or is there another way to include the Scala Nature along side the Java Nature?

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = "SampleApp"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    javaCore, javaJdbc, javaEbean
  )

  val main = play.Project(appName, appVersion, appDependencies).settings(
    // Want to set mainLang = SCALA here, but don't know how
  )
}

I use sbt for everything, so play commands are off limits (to avoid additional system dependencies)

Edit: I'm using play-sbt 2.1.0, Scala 2.10.1-RC1, and sbt 0.12.2

1

1 Answers

2
votes

By looking at the Play sbt-eclipse source code (here and here), I managed to make it work using the following Build.scala file:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = "SampleApp"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    javaCore, javaJdbc, javaEbean
  )

  import com.typesafe.sbteclipse.core._
  import com.typesafe.sbteclipse.core.EclipsePlugin._
  import scala.xml.transform.RewriteRule

  val main = play.Project(appName, appVersion, appDependencies).settings(
    EclipseKeys.projectFlavor := EclipseProjectFlavor.Scala,
    EclipseKeys.projectTransformerFactories := Seq[EclipseTransformerFactory[RewriteRule]]()
  )
}

Do not forget the 3 imports.

There should be a better way using directly eclipseCommandSettings("SCALA") but I did not find it.