212 lines
9.2 KiB
Scala
212 lines
9.2 KiB
Scala
// The simplest possible sbt build file is just one line:
|
|
|
|
scalaVersion := "2.13.3"
|
|
// That is, to create a valid sbt build, all you've got to do is define the
|
|
// version of Scala you'd like your project to use.
|
|
|
|
// ============================================================================
|
|
|
|
// Lines like the above defining `scalaVersion` are called "settings". Settings
|
|
// are key/value pairs. In the case of `scalaVersion`, the key is "scalaVersion"
|
|
// and the value is "2.13.1"
|
|
|
|
// It's possible to define many kinds of settings, such as:
|
|
|
|
// Note, it's not required for you to define these three settings. These are
|
|
// mostly only necessary if you intend to publish your library's binaries on a
|
|
// place like Sonatype or Bintray.
|
|
|
|
// Want to use a published library in your project?
|
|
// You can define other libraries as dependencies in your build like this:
|
|
|
|
resolvers += "Jcenter" at "https://jcenter.bintray.com/"
|
|
resolvers += "JME Bintray" at "https://bintray.com/jmonkeyengine/com.jme3"
|
|
resolvers += "Jitpack" at "https://jitpack.io"
|
|
|
|
resolvers += Resolver.mavenLocal
|
|
resolvers += Resolver.sonatypeRepo("snapshots")
|
|
|
|
lazy val jmeVersion = "3.3.2-stable"
|
|
|
|
lazy val osName = System.getProperty("os.name") match {
|
|
case n if n.startsWith("Linux") => "linux"
|
|
case n if n.startsWith("Mac") => "mac"
|
|
case n if n.startsWith("Windows") => "win"
|
|
case _ => throw new Exception("Unknown platform!")
|
|
}
|
|
lazy val javaFXModules =
|
|
Seq("base", "controls", "fxml", "graphics", "media", "swing", "web")
|
|
|
|
lazy val root = (project in file(".")).settings(
|
|
inThisBuild(
|
|
List(
|
|
scalaVersion := scalaVersion.value, // 2.11.12, or 2.13.3
|
|
semanticdbEnabled := true, // enable SemanticDB
|
|
semanticdbVersion := "4.3.24" // use Scalafix compatible version
|
|
)
|
|
),
|
|
name := "mygame",
|
|
organization := "wow.doge",
|
|
version := "1.0-SNAPSHOT",
|
|
libraryDependencies ++= Seq(
|
|
// "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2",
|
|
// https://mvnrepository.com/artifact/org.jmonkeyengine/jme3-core
|
|
"org.jmonkeyengine" % "jme3-core" % jmeVersion,
|
|
// https://mvnrepository.com/artifact/org.jmonkeyengine/jme3-desktop
|
|
"org.jmonkeyengine" % "jme3-desktop" % jmeVersion,
|
|
// https://mvnrepository.com/artifact/org.jmonkeyengine/jme3-lwjgl3
|
|
"org.jmonkeyengine" % "jme3-lwjgl3" % jmeVersion,
|
|
"org.jmonkeyengine" % "jme3-effects" % jmeVersion,
|
|
"org.jmonkeyengine" % "jme3-plugins" % jmeVersion,
|
|
"org.jmonkeyengine" % "jme3-blender" % jmeVersion,
|
|
"com.github.stephengold" % "Minie" % "3.0.0",
|
|
"com.simsilica" % "zay-es" % "1.2.1",
|
|
"org.typelevel" %% "cats-core" % "2.1.1",
|
|
"com.lihaoyi" % "ammonite" % "2.2.0" cross CrossVersion.full,
|
|
"org.jetbrains.kotlin" % "kotlin-main-kts" % "1.4.10",
|
|
"org.jetbrains.kotlin" % "kotlin-scripting-jsr223" % "1.4.10",
|
|
"org.codehaus.groovy" % "groovy-all" % "3.0.6" pomOnly (),
|
|
"org.scalafx" %% "scalafx" % "14-R19",
|
|
"com.typesafe.akka" %% "akka-actor-typed" % "2.6.10",
|
|
"org.typelevel" %% "cats-core" % "2.1.1",
|
|
"org.typelevel" %% "cats-effect" % "2.1.4",
|
|
"io.monix" %% "monix" % "3.2.2",
|
|
"io.monix" %% "monix-bio" % "1.1.0",
|
|
"io.circe" %% "circe-core" % "0.13.0",
|
|
"io.circe" %% "circe-generic" % "0.13.0",
|
|
"com.softwaremill.sttp.client" %% "core" % "2.2.5",
|
|
"com.softwaremill.sttp.client" %% "monix" % "2.2.5",
|
|
"com.softwaremill.sttp.client" %% "circe" % "2.2.5",
|
|
"com.softwaremill.sttp.client" %% "async-http-client-backend-monix" % "2.2.5",
|
|
"com.github.valskalla" %% "odin-monix" % "0.8.1",
|
|
"com.github.valskalla" %% "odin-json" % "0.9.1",
|
|
"com.softwaremill.macwire" %% "util" % "2.3.7",
|
|
"com.softwaremill.macwire" %% "macros" % "2.3.7" % "provided",
|
|
// "com.softwaremill.macwire" %% "macrosakka" % "2.3.6" % "provided",
|
|
"com.github.valskalla" %% "odin-slf4j" % "0.8.1",
|
|
"com.softwaremill.quicklens" %% "quicklens" % "1.6.1",
|
|
"org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.0-RC1",
|
|
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
|
|
"io.circe" %% "circe-config" % "0.8.0",
|
|
"com.beachape" %% "enumeratum-circe" % "1.6.1",
|
|
"com.lihaoyi" %% "os-lib" % "0.7.1",
|
|
// "com.jayfella" % "jme-jfx-11" % "1.1.5",
|
|
// "com.github.goxr3plus" % "FX-BorderlessScene" % "4.4.0",
|
|
// "com.github.Oshan96" % "CustomStage" % "v1.3.1",
|
|
"com.badlogicgames.gdx" % "gdx-ai" % "1.8.2",
|
|
"org.recast4j" % "recast" % "1.2.5",
|
|
"org.recast4j" % "detour" % "1.2.5",
|
|
"com.lihaoyi" %% "pprint" % "0.6.0"
|
|
),
|
|
// Determine OS version of JavaFX binaries
|
|
|
|
// Add JavaFX dependencies
|
|
libraryDependencies ++= javaFXModules.map(m =>
|
|
"org.openjfx" % s"javafx-$m" % "14.0.1" classifier osName
|
|
),
|
|
scalacOptions ++= Seq(
|
|
"-encoding",
|
|
"UTF-8",
|
|
"-deprecation",
|
|
"-feature",
|
|
"-language:existentials",
|
|
"-language:experimental.macros",
|
|
"-language:higherKinds",
|
|
"-language:implicitConversions",
|
|
"-unchecked",
|
|
"-Xlint",
|
|
"-Ywarn-numeric-widen",
|
|
"-Ymacro-annotations",
|
|
// "-Xlint:byname-implicit",
|
|
// "utf-8", // Specify character encoding used by source files.
|
|
//silence warnings for by-name implicits
|
|
"-Wconf:cat=lint-byname-implicit:s",
|
|
//give errors on non exhaustive matches
|
|
"-Wconf:msg=match may not be exhaustive:e",
|
|
"-explaintypes" // Explain type errors in more detail.
|
|
),
|
|
javacOptions ++= Seq("-source", "11", "-target", "11"),
|
|
javaOptions ++= Seq("-Xmx2G", "-Xms2G"),
|
|
fork := true,
|
|
assemblyMergeStrategy in assembly := {
|
|
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first
|
|
case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
|
|
case "application.conf" => MergeStrategy.concat
|
|
case "unwanted.txt" => MergeStrategy.discard
|
|
case x if Assembly.isConfigFile(x) =>
|
|
MergeStrategy.concat
|
|
case PathList("META-INF", xs @ _*) =>
|
|
(xs map { _.toLowerCase }) match {
|
|
case ("manifest.mf" :: Nil) | ("index.list" :: Nil) |
|
|
("dependencies" :: Nil) =>
|
|
MergeStrategy.discard
|
|
case ps @ (x :: xs)
|
|
if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
|
|
MergeStrategy.discard
|
|
case "plexus" :: xs =>
|
|
MergeStrategy.discard
|
|
case "services" :: xs =>
|
|
MergeStrategy.filterDistinctLines
|
|
case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) =>
|
|
MergeStrategy.filterDistinctLines
|
|
case _ => MergeStrategy.first // Changed deduplicate to first
|
|
}
|
|
case PathList(_*) => MergeStrategy.first
|
|
// case x =>
|
|
// val oldStrategy = (assemblyMergeStrategy in assembly).value
|
|
// oldStrategy(x)
|
|
}
|
|
)
|
|
initialCommands in (console) := """ammonite.Main.main(Array.empty)"""
|
|
|
|
// Here, `libraryDependencies` is a set of dependencies, and by using `+=`,
|
|
// we're adding the scala-parser-combinators dependency to the set of dependencies
|
|
// that sbt will go and fetch when it starts up.
|
|
// Now, in any Scala file, you can import classes, objects, etc., from
|
|
// scala-parser-combinators with a regular import.
|
|
|
|
// TIP: To find the "dependency" that you need to add to the
|
|
// `libraryDependencies` set, which in the above example looks like this:
|
|
|
|
// "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2"
|
|
|
|
// You can use Scaladex, an index of all known published Scala libraries. There,
|
|
// after you find the library you want, you can just copy/paste the dependency
|
|
// information that you need into your build file. For example, on the
|
|
// scala/scala-parser-combinators Scaladex page,
|
|
// https://index.scala-lang.org/scala/scala-parser-combinators, you can copy/paste
|
|
// the sbt dependency from the sbt box on the right-hand side of the screen.
|
|
|
|
// IMPORTANT NOTE: while build files look _kind of_ like regular Scala, it's
|
|
// important to note that syntax in *.sbt files doesn't always behave like
|
|
// regular Scala. For example, notice in this build file that it's not required
|
|
// to put our settings into an enclosing object or class. Always remember that
|
|
// sbt is a bit different, semantically, than vanilla Scala.
|
|
|
|
// ============================================================================
|
|
|
|
// Most moderately interesting Scala projects don't make use of the very simple
|
|
// build file style (called "bare style") used in this build.sbt file. Most
|
|
// intermediate Scala projects make use of so-called "multi-project" builds. A
|
|
// multi-project build makes it possible to have different folders which sbt can
|
|
// be configured differently for. That is, you may wish to have different
|
|
// dependencies or different testing frameworks defined for different parts of
|
|
// your codebase. Multi-project builds make this possible.
|
|
|
|
// Here's a quick glimpse of what a multi-project build looks like for this
|
|
// build, with only one "subproject" defined, called `root`:
|
|
|
|
// lazy val root = (project in file(".")).
|
|
// settings(
|
|
// inThisBuild(List(
|
|
// organization := "ch.epfl.scala",
|
|
// scalaVersion := "2.13.1"
|
|
// )),
|
|
// name := "hello-world"
|
|
// )
|
|
|
|
// To learn more about multi-project builds, head over to the official sbt
|
|
// documentation at http://www.scala-sbt.org/documentation.html
|
|
addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1")
|
|
ThisBuild / scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.4.3"
|