Run Play project from sbt - scala

I am about to publish a Play project to github, but I would like that Scala developers don't need to install play separately if they already have sbt installed.
Would it be possible to compile and run a Play project with sbt if we add the correct dependencies ?
My working build.sbt for Play is here, but it doesn't work with sbt.
import play.Project._
name := "my_project_name"
version := "1.0"
libraryDependencies ++= Seq(
"com.netflix.rxjava" % "rxjava-scala" % "0.17.4",
"oauth.signpost" % "signpost-core" % "1.2.1.2",
"oauth.signpost" % "signpost-commonshttp4" % "1.2.1.2",
"org.apache.httpcomponents" % "httpclient" % "4.3.3",
"commons-io" % "commons-io" % "2.3"
)
playScalaSettings
Thanks!

You just should add the following line to project/plugins.sbt file:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.3") // or your play version
play new does this by default.
You may check if the project is executable by sbt by executing sbt run from the terminal.

Related

lift libs in Eclipse ScalaIDE is incompatible with all scala versions

Last day i start Scala with lift framework and Eclipse IDE. after checking this link:
http://scala-ide.org/docs/tutorials/lift24scalaide20/
I setup my project with eclipse. the first time the lift-basic runs as well as any project. but after trying to start a new project eclipse got 12 errors to me with content like this:
lift-actor_2.12-3.0.1.jar of lift_parsing_web build path is cross-compiled with an incompatible version of Scala (2.12.0). In case this report is mistaken, this check can be disabled in the compiler preference page.
hear is my build.sbt file:
name := "lift-parsing"
organization := "my.company"
version := "0.1-SNAPSHOT"
scalaVersion := "2.12.1"
libraryDependencies ++= {
val liftVersion = "3.0.1"
Seq(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile",
"net.liftweb" %% "lift-mapper" % liftVersion % "compile",
"org.mortbay.jetty" % "jetty" % "6.1.26" % "test",
"junit" % "junit" % "4.7" % "test",
"ch.qos.logback" % "logback-classic" % "0.9.26",
"org.scala-tools.testing" % "specs_2.9.1" % "1.6.9",
"com.h2database" % "h2" % "1.2.147"
)
}
in this file i test lift 3.0.1 with scala 2.12.1 as this two version are installed.
but before this test I used the default 2.9.1 scala version and 2.4 lift version and also same problems. in some solutions i change the compiler setting and ignore this error but after that eclipse can't biuld the project and make .class file.
scala: 2.12.1
sbt: 0.13
lift: 3.0.1
finally this is my screen error. thanks for help
errors screenshot
I would check to see if Eclipse has a separate Scala version configuration beyond the one that you define in your sbt file. 2.12.0 and 2.12.1 should be binary compatible, so this shouldn't be a problem if you're using 2.12.1. Also try to build this directly using sbt and see if it registers a problem---if not, that implies it's probably an Eclipse configuration issue.

Can't compile 2.2 to 2.3 Migration

I have been fighting with this for the past few hours and I haven't made any headway at all. It seems no matter what I do, I keep getting the same error.
java.lang.NoClassDefFoundError: play/Project$
My build.sbt
name := "appname"
version := "1.0-SNAPSHOT"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
filters,
"org.postgresql" % "postgresql" % "9.3-1100-jdbc4",
"org.mindrot" % "jbcrypt" % "0.3m",
"org.webjars" %% "webjars-play" % "2.3.0-2",
"org.webjars" % "foundation" % "5.3.0",
"org.scalaj" %% "scalaj-http" % "0.3.16"
)
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.10.4"
I have also tried this build.sbt
object ApplicationBuild extends Build {
val appName = "appname"
val appVersion = "1.0-SNAPSHOT"
val appDependencies ++= Seq(
jdbc,
anorm,
cache,
filters,
"org.postgresql" % "postgresql" % "9.3-1100-jdbc4",
"org.mindrot" % "jbcrypt" % "0.3m",
"org.webjars" %% "webjars-play" % "2.3.0-2",
"org.webjars" % "foundation" % "5.3.0",
"org.scalaj" %% "scalaj-http" % "0.3.16"
)
val main = Project(appName, file(".")).enablePlugins(play.PlayScala).settings(
scalaVersion := "2.10.4",
version := appVersion,
libraryDependencies ++= appDependencies
)
}
As well as different tweaks and modifications. Always the same error. The build.properties is set to sbt.version=0.13.5
plugins.sbt
logLevel := Level.Debug
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.4")
After running Patrick Mahoney's suggestion and making sure I removed the import.
Errors:
[error] java.lang.NoClassDefFoundError: play/Project$
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q
me#me-desktop:~/Projects/appname$ sbt --version
sbt launcher version 0.13.6
me#me-desktop:~/Projects/appname$ find . | grep -r "play.Project"
me#me-desktop:~/Projects/appname$ find . | grep -r "play/Project"
Try cleaning your build project compiled outputs:
rm -rf project/target
or
$> sbt "reload plugins" clean
(in addition to applying James' answer)
Thanks to James and Patrick, but I found the problem. The problem was in the activator-sbt-echo-play-shim.sbt file in the /project directory.
It contained the following:
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "0.1.1.3")
I created a second blank 2.3.4 app using Activator and it's activator-sbt-echo-play-shim.sbt listed:
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5")
So I updated the one in my project to 1.5 and deleted the idea and eclipse .sbts for good measure and the app was finally able to compile. It auotmatically updated the above to:
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5.2")
Now I have other, more expected, issues I need to work out (like anorm). But I'm now able to compile it and get those errors to start working them out. I did not think these files were part of the activator/sbt compile, but I guess they were. I thought they were for debugging. But they made the difference and the changes above worked.
Thanks again to everyone for their help.
Make sure you've updated project/build.properties to have sbt version 0.13.5. Then, remove import play.Project._, it's not needed. That should work.

how to configure mahout with play framework

How can I include mahout 0.9 libraries in play-framework 2.2.
I have added the jar files in the build path of eclipse but when I run the play app the following error is displayed for mahout imports
error: package org.apache.mahout.cf.taste.model does not exist
Include this line in build.sbt of play project
"org.apache.mahout" % "mahout-core" % "0.9"
Full build.sbt looks like this
name := <your_project_name>
version := "1.0-SNAPSHOT"
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
"org.apache.mahout" % "mahout-core" % "0.9"
)
play.Project.playJavaSettings

SBT 0.7.7 incremental recompilation doesnt work anymore

I'm using sbt 0.7.7 on ubuntu 12.10 to build a Lift app (Lift 2.4/Java 1.6/ Scala 2.7.7)
When I modify a source file, the sbt compiler recompiles all (even independent) files.
A debug output of "compile" shows:
[debug] External /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jce.jar not on classpath.
[debug] External dependency /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jce.jar not found.
I'm using ~compile and the file is available in the correct path.
Can anybody help me?
** Solution **
Thanks for your help.
It looks like sbt 0.7.7 can't handle symlinks correctly.
I removed the symlink and replaced it by a copy of the original file. This solved the problem.
But we're also updating to sbt 12.3 as soon as possible.
I have this file on my ubuntu 13.04
are you sure they're independent? Is it checkable in some way?
what command do you use for compilation? ~ compile ?
I'd suggest to move from the old SBT, old Lift and old Scala anyway. They're far-far away old, new versions have many improvements in performance and allowed techniques. And in the Scala environment it's common to evolutionize quickly, reducing the maintenance period. Check out the most recent official template: https://github.com/lift/lift_25_sbt/
SBT 0.7.7 is severely deprecated. Unless there is any specific reason for which you have to use that version, a 0.12.3 upgrade will make things much easier.
Most frameworks do not legacy support that version of SBT.
Make sure Java is there
Don't use the open source version of the JDK, it is known to cause hassle with Scala at times.
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
Sample config
name := "YourApp"
version := "0.1-SNAPSHOT"
scalaVersion := "2.10.0"
seq(com.github.siasia.WebPlugin.webSettings :_*)
seq(jrebelSettings: _*)
jrebel.webLinks <++= webappResources in Compile
resolvers ++= Seq(
"Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
"Sonatype releases" at "https://oss.sonatype.org/content/repositories/releases"
)
libraryDependencies ++= {
val liftVersion = "2.5-RC6"
Seq(
"commons-lang" % "commons-lang" % "2.6",
"net.liftweb" %% "lift-webkit" % liftVersion % "compile",
"net.liftweb" %% "lift-mongodb-record" % liftVersion % "compile",
"org.mongodb" %% "casbah" % "2.5.0" % "compile",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container,compile",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container,compile" artifacts Artifact("javax.servlet", "jar", "jar"),
"org.specs2" %% "specs2" % "1.12.3" % "test",
"ch.qos.logback" % "logback-classic" % "1.0.7" % "compile"
)
}
classpathTypes ~= (_ + "orbit")
port in container.Configuration := 9100
EclipseKeys.withSource := true

Need help getting sbt 0.10 to choose a local copy of scala 2.9.1.final on Ubuntu

What I have so far:
.bashrc
2 PATH=/opt/scala-2.9.1.final/bin:$PATH
3 PATH=/opt/sbt:$PATH
So my scala-2.9.1.final version is in the /opt folder. The same goes with sbt 0.10.
I'm trying to get it to pick my 2.9.1.final instead of 2.8 whatever. I've tried looking.
What i've done so far is putting symbolic links in projectname/boot/ directory.
ln -s /opt/scala-2.9.1.final scala-2.9.1.final
But it doesn't seem to work? I've also tried this build.sbt (https://github.com/VonC/xsbt-template/blob/master/build.sbt) and change the version to 2.9.1.final.
How do I get sbt>console to use 2.9.1.final? And how does it build using 2.9.1.final?
This is what I get when I type sbt:
user#acomputer:~/project/sbt$ sbt
[info] Set current project to default-295917 (in build file:/home/user/project/sbt/)
>
Thank you for your time.
I'm not experienced sbt user and may only suggest. Seems sbt 0.10.x use scala 2.8.1 itself, so I think sbt console is working by default with this version.
But you can build project with targetting on 2.9.1 by specify scala version in you build.sbt file: `scalaVersion := "2.9.1"' (see https://github.com/harrah/xsbt/wiki/Setup "ConfigureBuild")
And also you can switch scala version used by sbt console by typing "++ 2.9.1" in sbt prompt. (see https://github.com/harrah/xsbt/wiki/Running)
Here's an example of an build.sbt in one of my projects.
organization := "com.andyczerwonka"
name := "esi.intelligence"
version := "0.1"
scalaVersion := "2.9.1"
retrieveManaged := false
logLevel := Level.Info
jettyScanDirs := Nil
seq(webSettings :_*)
temporaryWarPath <<= (sourceDirectory in Compile)(_ / "webapp")
libraryDependencies ++= {
val liftVersion = "2.4-M4"
Seq(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile->default",
"net.liftweb" %% "lift-mapper" % liftVersion % "compile",
"org.eclipse.jetty" % "jetty-webapp" % "7.3.0.v20110203" % "provided,jetty",
"junit" % "junit" % "4.8" % "test",
"ch.qos.logback" % "logback-classic" % "0.9.26",
"org.specs2" %% "specs2" % "1.6.1" % "test",
"net.databinder" %% "dispatch-http" % "0.8.5",
"com.h2database" % "h2" % "1.2.138"
)
}
Notice the 4th line. This tells sbt that I want to use 2.9.1. sbt will bring it down for me and use it.