forked from loafle/openapi-generator-original
		
	[Scalatra] Updated the version of Scalatra to the latest (2.6.2) (#7393)
* Updated the version of Scalatra to the latest (2.6.2) - Updated Scalatra 2.6.2 (latest) - Updated Scala 2.12.4 - Updated sbt 1.1.0 - Reduced dependent artifacts to a minimum - Cleaned up build.sbt - Changed the package name from client to server - Set log output (logback) - Updated web.xml for servlet 3.1 * rename package 'com.wordnik' -> 'io.swagger' * Added rolling file appender to logback.xml
This commit is contained in:
		
							parent
							
								
									3029b7b0fb
								
							
						
					
					
						commit
						d5c355a596
					
				@ -16,7 +16,7 @@ import java.util.Map;
 | 
			
		||||
public class ScalatraServerCodegen extends AbstractScalaCodegen implements CodegenConfig {
 | 
			
		||||
 | 
			
		||||
    protected String groupId = "io.swagger";
 | 
			
		||||
    protected String artifactId = "swagger-client";
 | 
			
		||||
    protected String artifactId = "swagger-server";
 | 
			
		||||
    protected String artifactVersion = "1.0.0";
 | 
			
		||||
 | 
			
		||||
    public ScalatraServerCodegen() {
 | 
			
		||||
@ -25,8 +25,8 @@ public class ScalatraServerCodegen extends AbstractScalaCodegen implements Codeg
 | 
			
		||||
        modelTemplateFiles.put("model.mustache", ".scala");
 | 
			
		||||
        apiTemplateFiles.put("api.mustache", ".scala");
 | 
			
		||||
        embeddedTemplateDir = templateDir = "scalatra";
 | 
			
		||||
        apiPackage = "com.wordnik.client.api";
 | 
			
		||||
        modelPackage = "com.wordnik.client.model";
 | 
			
		||||
        apiPackage = "io.swagger.server.api";
 | 
			
		||||
        modelPackage = "io.swagger.server.model";
 | 
			
		||||
 | 
			
		||||
        setReservedWordsLowerCase(
 | 
			
		||||
                Arrays.asList(
 | 
			
		||||
@ -79,6 +79,7 @@ public class ScalatraServerCodegen extends AbstractScalaCodegen implements Codeg
 | 
			
		||||
        supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("build.sbt", "", "build.sbt"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("web.xml", "/src/main/webapp/WEB-INF", "web.xml"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("logback.xml", "/src/main/resources", "logback.xml"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("JettyMain.mustache", sourceFolder, "JettyMain.scala"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("Bootstrap.mustache", sourceFolder, "ScalatraBootstrap.scala"));
 | 
			
		||||
        supportingFiles.add(new SupportingFile("ServletApp.mustache", sourceFolder, "ServletApp.scala"));
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,7 @@
 | 
			
		||||
{{>licenseInfo}}
 | 
			
		||||
 | 
			
		||||
import {{apiPackage}}._
 | 
			
		||||
import akka.actor.ActorSystem
 | 
			
		||||
import io.swagger.app.{ResourcesApp, SwaggerApp}
 | 
			
		||||
import io.swagger.app.{ ResourcesApp, SwaggerApp }
 | 
			
		||||
import javax.servlet.ServletContext
 | 
			
		||||
import org.scalatra.LifeCycle
 | 
			
		||||
 | 
			
		||||
@ -10,7 +9,6 @@ class ScalatraBootstrap extends LifeCycle {
 | 
			
		||||
  implicit val swagger = new SwaggerApp
 | 
			
		||||
 | 
			
		||||
  override def init(context: ServletContext) {
 | 
			
		||||
    implicit val system = ActorSystem("appActorSystem")
 | 
			
		||||
    try {
 | 
			
		||||
      {{#apiInfo}}{{#apis}}context mount (new {{classname}}, "{{basePathWithoutHost}}/{{baseName}}/*")
 | 
			
		||||
      {{/apis}}{{/apiInfo}}
 | 
			
		||||
@ -19,4 +17,4 @@ class ScalatraBootstrap extends LifeCycle {
 | 
			
		||||
      case e: Throwable => e.printStackTrace()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
{{>licenseInfo}}
 | 
			
		||||
 | 
			
		||||
import org.eclipse.jetty.server._
 | 
			
		||||
import org.eclipse.jetty.webapp.WebAppContext
 | 
			
		||||
import org.scalatra.servlet.ScalatraListener
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,4 @@ This server was generated by the [swagger-codegen](https://github.com/swagger-ap
 | 
			
		||||
[OpenAPI-Spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub.  This
 | 
			
		||||
is an example of building a swagger-enabled scalatra server.
 | 
			
		||||
 | 
			
		||||
This example uses the [scalatra](http://scalatra.org/) framework.  To see how to make this your own, look here:
 | 
			
		||||
 | 
			
		||||
[README](https://github.com/swagger-api/swagger-codegen/tree/master/samples/server-generator/scalatra)
 | 
			
		||||
This example uses the [scalatra](http://scalatra.org/) framework.
 | 
			
		||||
 | 
			
		||||
@ -2,33 +2,19 @@
 | 
			
		||||
 | 
			
		||||
package io.swagger.app
 | 
			
		||||
 | 
			
		||||
import _root_.akka.actor.ActorSystem
 | 
			
		||||
 | 
			
		||||
import org.scalatra.swagger.{ ApiInfo, SwaggerWithAuth, Swagger }
 | 
			
		||||
import org.scalatra.swagger.{JacksonSwaggerBase, Swagger}
 | 
			
		||||
import org.scalatra.swagger.{ JacksonSwaggerBase, Swagger }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.json4s.{DefaultFormats, Formats}
 | 
			
		||||
import org.json4s.{ DefaultFormats, Formats }
 | 
			
		||||
 | 
			
		||||
class ResourcesApp(implicit protected val system: ActorSystem, val swagger: SwaggerApp)
 | 
			
		||||
class ResourcesApp(implicit protected val swagger: SwaggerApp)
 | 
			
		||||
  extends ScalatraServlet with JacksonSwaggerBase {
 | 
			
		||||
  before() {
 | 
			
		||||
    response.headers += ("Access-Control-Allow-Origin" -> "*")
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected def buildFullUrl(path: String) = if (path.startsWith("http")) path else {
 | 
			
		||||
   val port = request.getServerPort
 | 
			
		||||
   val h = request.getServerName
 | 
			
		||||
   val prot = if (port == 443) "https" else "http"
 | 
			
		||||
   val (proto, host) = if (port != 80 && port != 443) ("http", h+":"+port.toString) else (prot, h)
 | 
			
		||||
   "%s://%s%s%s".format(
 | 
			
		||||
     proto,
 | 
			
		||||
     host,
 | 
			
		||||
     request.getContextPath,
 | 
			
		||||
     path)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SwaggerApp extends Swagger(apiInfo = ApiSwagger.apiInfo, apiVersion = "1.0", swaggerVersion = "1.2")
 | 
			
		||||
class SwaggerApp extends Swagger(apiInfo = ApiSwagger.apiInfo, apiVersion = "1.0", swaggerVersion = Swagger.SpecVersion)
 | 
			
		||||
 | 
			
		||||
object ApiSwagger {
 | 
			
		||||
  val apiInfo = ApiInfo(
 | 
			
		||||
@ -38,4 +24,4 @@ object ApiSwagger {
 | 
			
		||||
    """{{{infoEmail}}}""",
 | 
			
		||||
    """{{{licenseInfo}}}""",
 | 
			
		||||
    """{{{licenseUrl}}}""")
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -7,23 +7,22 @@ package {{package}}
 | 
			
		||||
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
import org.scalatra.{ TypedParamSupport, ScalatraServlet }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.scalatra.swagger._
 | 
			
		||||
import org.json4s._
 | 
			
		||||
import org.json4s.JsonDSL._
 | 
			
		||||
import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
 | 
			
		||||
import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException}
 | 
			
		||||
import org.scalatra.servlet.{ FileUploadSupport, MultipartConfig, SizeConstraintExceededException }
 | 
			
		||||
 | 
			
		||||
import scala.collection.JavaConverters._
 | 
			
		||||
 | 
			
		||||
class {{classname}} (implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
    with FileUploadSupport
 | 
			
		||||
    with JacksonJsonSupport
 | 
			
		||||
    with SwaggerSupport {
 | 
			
		||||
class {{classname}}(implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
  with FileUploadSupport
 | 
			
		||||
  with JacksonJsonSupport
 | 
			
		||||
  with SwaggerSupport {
 | 
			
		||||
  protected implicit val jsonFormats: Formats = DefaultFormats
 | 
			
		||||
 | 
			
		||||
  protected val applicationDescription: String = "{{classname}}"
 | 
			
		||||
  override protected val applicationName: Option[String] = Some("{{basePathWithoutHost}}/{{baseName}}")
 | 
			
		||||
 | 
			
		||||
  before() {
 | 
			
		||||
    contentType = formats("json")
 | 
			
		||||
 | 
			
		||||
@ -1,64 +1,21 @@
 | 
			
		||||
import AssemblyKeys._ // put this at the top of the file
 | 
			
		||||
 | 
			
		||||
import NativePackagerKeys._
 | 
			
		||||
 | 
			
		||||
packageArchetype.java_server
 | 
			
		||||
 | 
			
		||||
assemblySettings
 | 
			
		||||
 | 
			
		||||
scalariformSettings
 | 
			
		||||
 | 
			
		||||
organization := "io.swagger"
 | 
			
		||||
 | 
			
		||||
seq(webSettings :_*)
 | 
			
		||||
name := "scalatra-sample"
 | 
			
		||||
version := "0.1.0-SNAPSHOT"
 | 
			
		||||
scalaVersion := "2.12.4"
 | 
			
		||||
 | 
			
		||||
mainClass in assembly := Some("JettyMain")
 | 
			
		||||
 | 
			
		||||
name := "scalatra-sample"
 | 
			
		||||
 | 
			
		||||
version := "0.1.0-SNAPSHOT"
 | 
			
		||||
 | 
			
		||||
scalaVersion := "2.11.2"
 | 
			
		||||
 | 
			
		||||
scalacOptions += "-language:postfixOps"
 | 
			
		||||
val ScalatraVersion = "2.6.2"
 | 
			
		||||
 | 
			
		||||
libraryDependencies ++= Seq(
 | 
			
		||||
  "org.scalatest"           %% "scalatest"                      % "2.2.1"               % "test",
 | 
			
		||||
  "org.scalatra"            %% "scalatra"                       % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-scalate"               % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-json"                  % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-swagger"               % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-swagger-ext"           % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-slf4j"                 % "2.3.0.RC3",
 | 
			
		||||
  "org.json4s"              %% "json4s-jackson"                 % "3.2.10",
 | 
			
		||||
  "org.json4s"              %% "json4s-ext"                     % "3.2.10",
 | 
			
		||||
  "commons-codec"            % "commons-codec"                  % "1.7",
 | 
			
		||||
  "net.databinder.dispatch" %% "dispatch-core"                  % "0.11.2",
 | 
			
		||||
  //"net.databinder.dispatch" %% "json4s-jackson"                 % "0.11.2",
 | 
			
		||||
  "net.databinder.dispatch" %% "dispatch-json4s-jackson"        % "0.11.2",
 | 
			
		||||
  "com.typesafe.akka"       %% "akka-actor"                     % "2.3.6",
 | 
			
		||||
  "org.eclipse.jetty"        % "jetty-server"                   % "9.2.3.v20140905" % "container;compile;test",
 | 
			
		||||
  "org.eclipse.jetty"        % "jetty-webapp"                   % "9.2.3.v20140905" % "container;compile;test",
 | 
			
		||||
  "org.eclipse.jetty.orbit"  % "javax.servlet"                  % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
 | 
			
		||||
  "org.scalatra"      %% "scalatra"             % ScalatraVersion,
 | 
			
		||||
  "org.scalatra"      %% "scalatra-swagger"     % ScalatraVersion,
 | 
			
		||||
  "org.scalatra"      %% "scalatra-scalatest"   % ScalatraVersion % Test,
 | 
			
		||||
  "org.json4s"        %% "json4s-jackson"       % "3.5.0",
 | 
			
		||||
  "org.eclipse.jetty" %  "jetty-server"         % "9.4.8.v20171121",
 | 
			
		||||
  "org.eclipse.jetty" %  "jetty-webapp"         % "9.4.8.v20171121",
 | 
			
		||||
  "javax.servlet"     %  "javax.servlet-api"    % "3.1.0",
 | 
			
		||||
  "ch.qos.logback"    %  "logback-classic"      % "1.2.3" % Provided
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
 | 
			
		||||
 | 
			
		||||
resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
 | 
			
		||||
 | 
			
		||||
resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"
 | 
			
		||||
 | 
			
		||||
ivyXML := <dependencies>
 | 
			
		||||
    <exclude module="slf4j-log4j12"/>
 | 
			
		||||
    <exclude module="grizzled-slf4j_2.9.1"/>
 | 
			
		||||
    <exclude module="jsr311-api" />
 | 
			
		||||
  </dependencies>
 | 
			
		||||
 | 
			
		||||
mergeStrategy in assembly <<= (mergeStrategy in assembly) {
 | 
			
		||||
  (old) => {
 | 
			
		||||
    case "about.html"     => MergeStrategy.discard
 | 
			
		||||
    case x => old(x)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
net.virtualvoid.sbt.graph.Plugin.graphSettings
 | 
			
		||||
enablePlugins(JettyPlugin)
 | 
			
		||||
@ -0,0 +1,29 @@
 | 
			
		||||
<configuration>
 | 
			
		||||
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 | 
			
		||||
    <!-- encoders are assigned the type
 | 
			
		||||
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
 | 
			
		||||
    <encoder>
 | 
			
		||||
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
 | 
			
		||||
    </encoder>
 | 
			
		||||
  </appender>
 | 
			
		||||
 | 
			
		||||
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 | 
			
		||||
    <file>logFile.log</file>
 | 
			
		||||
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
      <!-- daily rollover -->
 | 
			
		||||
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
 | 
			
		||||
 | 
			
		||||
      <!-- keep 30 days' worth of history -->
 | 
			
		||||
      <maxHistory>30</maxHistory>
 | 
			
		||||
    </rollingPolicy>
 | 
			
		||||
 | 
			
		||||
    <encoder>
 | 
			
		||||
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
 | 
			
		||||
    </encoder>
 | 
			
		||||
  </appender>
 | 
			
		||||
 | 
			
		||||
  <root level="info">
 | 
			
		||||
    <appender-ref ref="FILE" />
 | 
			
		||||
    <appender-ref ref="STDOUT" />
 | 
			
		||||
  </root>
 | 
			
		||||
</configuration>
 | 
			
		||||
@ -1,19 +1,16 @@
 | 
			
		||||
{{>licenseInfo}}
 | 
			
		||||
 | 
			
		||||
package {{package}}
 | 
			
		||||
 | 
			
		||||
{{#imports}}import {{import}}
 | 
			
		||||
{{/imports}}
 | 
			
		||||
 | 
			
		||||
{{#models}}
 | 
			
		||||
{{#model}}
 | 
			
		||||
case class {{classname}} (
 | 
			
		||||
case class {{classname}}(
 | 
			
		||||
  {{#vars}}
 | 
			
		||||
  {{#description}}
 | 
			
		||||
  /* {{{description}}} */
 | 
			
		||||
/* {{{description}}} */
 | 
			
		||||
  {{/description}}
 | 
			
		||||
  {{name}}: {{^required}}Option[{{/required}}{{datatype}}{{^required}}]{{/required}}{{#hasMore}},{{/hasMore}}
 | 
			
		||||
  {{/vars}}
 | 
			
		||||
)
 | 
			
		||||
  {{/vars}})
 | 
			
		||||
{{/model}}
 | 
			
		||||
{{/models}}
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
sbt.version=0.13.5
 | 
			
		||||
sbt.version=1.1.0
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,3 @@
 | 
			
		||||
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.10.1")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.5")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "0.9.0")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.3.0")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4")
 | 
			
		||||
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
 | 
			
		||||
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.0.1")
 | 
			
		||||
addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2")
 | 
			
		||||
 | 
			
		||||
@ -1,25 +1,100 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# A more capable sbt runner, coincidentally also called sbt.
 | 
			
		||||
# Author: Paul Phillips <paulp@typesafe.com>
 | 
			
		||||
# Author: Paul Phillips <paulp@improving.org>
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
declare -r sbt_release_version="0.13.16"
 | 
			
		||||
declare -r sbt_unreleased_version="0.13.16"
 | 
			
		||||
 | 
			
		||||
declare -r latest_213="2.13.0-M2"
 | 
			
		||||
declare -r latest_212="2.12.4"
 | 
			
		||||
declare -r latest_211="2.11.12"
 | 
			
		||||
declare -r latest_210="2.10.7"
 | 
			
		||||
declare -r latest_29="2.9.3"
 | 
			
		||||
declare -r latest_28="2.8.2"
 | 
			
		||||
 | 
			
		||||
# todo - make this dynamic
 | 
			
		||||
declare -r sbt_release_version="0.13.6"
 | 
			
		||||
declare -r sbt_unreleased_version="0.13.6"
 | 
			
		||||
declare -r buildProps="project/build.properties"
 | 
			
		||||
 | 
			
		||||
declare sbt_jar sbt_dir sbt_create sbt_version
 | 
			
		||||
declare scala_version sbt_explicit_version
 | 
			
		||||
declare verbose noshare batch trace_level log_level
 | 
			
		||||
declare sbt_saved_stty debugUs
 | 
			
		||||
declare -r sbt_launch_ivy_release_repo="http://repo.typesafe.com/typesafe/ivy-releases"
 | 
			
		||||
declare -r sbt_launch_ivy_snapshot_repo="https://repo.scala-sbt.org/scalasbt/ivy-snapshots"
 | 
			
		||||
declare -r sbt_launch_mvn_release_repo="http://repo.scala-sbt.org/scalasbt/maven-releases"
 | 
			
		||||
declare -r sbt_launch_mvn_snapshot_repo="http://repo.scala-sbt.org/scalasbt/maven-snapshots"
 | 
			
		||||
 | 
			
		||||
declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m"
 | 
			
		||||
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
 | 
			
		||||
 | 
			
		||||
declare sbt_jar sbt_dir sbt_create sbt_version sbt_script sbt_new
 | 
			
		||||
declare sbt_explicit_version
 | 
			
		||||
declare verbose noshare batch trace_level
 | 
			
		||||
declare debugUs
 | 
			
		||||
 | 
			
		||||
declare java_cmd="java"
 | 
			
		||||
declare sbt_launch_dir="$HOME/.sbt/launchers"
 | 
			
		||||
declare sbt_launch_repo
 | 
			
		||||
 | 
			
		||||
# pull -J and -D options to give to java.
 | 
			
		||||
declare -a java_args scalac_args sbt_commands residual_args
 | 
			
		||||
 | 
			
		||||
# args to jvm/sbt via files or environment variables
 | 
			
		||||
declare -a extra_jvm_opts extra_sbt_opts
 | 
			
		||||
 | 
			
		||||
echoerr () { echo >&2 "$@"; }
 | 
			
		||||
vlog ()    { [[ -n "$verbose" ]] && echoerr "$@"; }
 | 
			
		||||
die ()     { echo "Aborting: $@" ; exit 1; }
 | 
			
		||||
 | 
			
		||||
setTrapExit () {
 | 
			
		||||
  # save stty and trap exit, to ensure echo is re-enabled if we are interrupted.
 | 
			
		||||
  export SBT_STTY="$(stty -g 2>/dev/null)"
 | 
			
		||||
 | 
			
		||||
  # restore stty settings (echo in particular)
 | 
			
		||||
  onSbtRunnerExit() {
 | 
			
		||||
    [ -t 0 ] || return
 | 
			
		||||
    vlog ""
 | 
			
		||||
    vlog "restoring stty: $SBT_STTY"
 | 
			
		||||
    stty "$SBT_STTY"
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  vlog "saving stty: $SBT_STTY"
 | 
			
		||||
  trap onSbtRunnerExit EXIT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# this seems to cover the bases on OSX, and someone will
 | 
			
		||||
# have to tell me about the others.
 | 
			
		||||
get_script_path () {
 | 
			
		||||
  local path="$1"
 | 
			
		||||
  [[ -L "$path" ]] || { echo "$path" ; return; }
 | 
			
		||||
 | 
			
		||||
  local target="$(readlink "$path")"
 | 
			
		||||
  if [[ "${target:0:1}" == "/" ]]; then
 | 
			
		||||
    echo "$target"
 | 
			
		||||
  else
 | 
			
		||||
    echo "${path%/*}/$target"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -r script_path="$(get_script_path "$BASH_SOURCE")"
 | 
			
		||||
declare -r script_name="${script_path##*/}"
 | 
			
		||||
 | 
			
		||||
init_default_option_file () {
 | 
			
		||||
  local overriding_var="${!1}"
 | 
			
		||||
  local default_file="$2"
 | 
			
		||||
  if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then
 | 
			
		||||
    local envvar_file="${BASH_REMATCH[1]}"
 | 
			
		||||
    if [[ -r "$envvar_file" ]]; then
 | 
			
		||||
      default_file="$envvar_file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  echo "$default_file"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)"
 | 
			
		||||
declare jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)"
 | 
			
		||||
 | 
			
		||||
# spaces are possible, e.g. sbt.version = 0.13.0
 | 
			
		||||
build_props_sbt () {
 | 
			
		||||
  [[ -r "$buildProps" ]] && \
 | 
			
		||||
    grep '^sbt\.version' "$buildProps" | tr '=' ' ' | awk '{ print $2; }'
 | 
			
		||||
    grep '^sbt\.version' "$buildProps" | tr '=\r' ' ' | awk '{ print $2; }'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_build_props_sbt () {
 | 
			
		||||
@ -43,104 +118,87 @@ set_sbt_version () {
 | 
			
		||||
  export sbt_version
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# restore stty settings (echo in particular)
 | 
			
		||||
onSbtRunnerExit() {
 | 
			
		||||
  [[ -n "$sbt_saved_stty" ]] || return
 | 
			
		||||
  vlog ""
 | 
			
		||||
  vlog "restoring stty: $sbt_saved_stty"
 | 
			
		||||
  stty "$sbt_saved_stty"
 | 
			
		||||
  unset sbt_saved_stty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# save stty and trap exit, to ensure echo is reenabled if we are interrupted.
 | 
			
		||||
trap onSbtRunnerExit EXIT
 | 
			
		||||
sbt_saved_stty="$(stty -g 2>/dev/null)"
 | 
			
		||||
vlog "Saved stty: $sbt_saved_stty"
 | 
			
		||||
 | 
			
		||||
# this seems to cover the bases on OSX, and someone will
 | 
			
		||||
# have to tell me about the others.
 | 
			
		||||
get_script_path () {
 | 
			
		||||
  local path="$1"
 | 
			
		||||
  [[ -L "$path" ]] || { echo "$path" ; return; }
 | 
			
		||||
 | 
			
		||||
  local target="$(readlink "$path")"
 | 
			
		||||
  if [[ "${target:0:1}" == "/" ]]; then
 | 
			
		||||
    echo "$target"
 | 
			
		||||
  else
 | 
			
		||||
    echo "${path%/*}/$target"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die() {
 | 
			
		||||
  echo "Aborting: $@"
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
make_url () {
 | 
			
		||||
  version="$1"
 | 
			
		||||
url_base () {
 | 
			
		||||
  local version="$1"
 | 
			
		||||
 | 
			
		||||
  case "$version" in
 | 
			
		||||
        0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;;
 | 
			
		||||
      0.10.* ) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
    0.11.[12]) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
            *) echo "$sbt_launch_repo/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
        0.7.*) echo "http://simple-build-tool.googlecode.com" ;;
 | 
			
		||||
      0.10.* ) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    0.11.[12]) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    0.*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmdd-hhMMss"
 | 
			
		||||
               echo "$sbt_launch_ivy_snapshot_repo" ;;
 | 
			
		||||
          0.*) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    *-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmdd-hhMMss"
 | 
			
		||||
               echo "$sbt_launch_mvn_snapshot_repo" ;;
 | 
			
		||||
            *) echo "$sbt_launch_mvn_release_repo" ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
init_default_option_file () {
 | 
			
		||||
  local overriding_var="${!1}"
 | 
			
		||||
  local default_file="$2"
 | 
			
		||||
  if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then
 | 
			
		||||
    local envvar_file="${BASH_REMATCH[1]}"
 | 
			
		||||
    if [[ -r "$envvar_file" ]]; then
 | 
			
		||||
      default_file="$envvar_file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  echo "$default_file"
 | 
			
		||||
make_url () {
 | 
			
		||||
  local version="$1"
 | 
			
		||||
 | 
			
		||||
  local base="${sbt_launch_repo:-$(url_base "$version")}"
 | 
			
		||||
 | 
			
		||||
  case "$version" in
 | 
			
		||||
        0.7.*) echo "$base/files/sbt-launch-0.7.7.jar" ;;
 | 
			
		||||
      0.10.* ) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
    0.11.[12]) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
          0.*) echo "$base/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
            *) echo "$base/org/scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -r cms_opts="-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC"
 | 
			
		||||
declare -r jit_opts="-XX:ReservedCodeCacheSize=256m -XX:+TieredCompilation"
 | 
			
		||||
declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m $jit_opts $cms_opts"
 | 
			
		||||
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
 | 
			
		||||
declare -r latest_28="2.8.2"
 | 
			
		||||
declare -r latest_29="2.9.3"
 | 
			
		||||
declare -r latest_210="2.10.4"
 | 
			
		||||
declare -r latest_211="2.11.2"
 | 
			
		||||
addJava ()     { vlog "[addJava] arg = '$1'"   ;     java_args+=("$1"); }
 | 
			
		||||
addSbt ()      { vlog "[addSbt] arg = '$1'"    ;  sbt_commands+=("$1"); }
 | 
			
		||||
addScalac ()   { vlog "[addScalac] arg = '$1'" ;   scalac_args+=("$1"); }
 | 
			
		||||
addResidual () { vlog "[residual] arg = '$1'"  ; residual_args+=("$1"); }
 | 
			
		||||
 | 
			
		||||
declare -r script_path="$(get_script_path "$BASH_SOURCE")"
 | 
			
		||||
declare -r script_name="${script_path##*/}"
 | 
			
		||||
addResolver () { addSbt "set resolvers += $1"; }
 | 
			
		||||
addDebugger () { addJava "-Xdebug" ; addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; }
 | 
			
		||||
setThisBuild () {
 | 
			
		||||
  vlog "[addBuild] args = '$@'"
 | 
			
		||||
  local key="$1" && shift
 | 
			
		||||
  addSbt "set $key in ThisBuild := $@"
 | 
			
		||||
}
 | 
			
		||||
setScalaVersion () {
 | 
			
		||||
  [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")'
 | 
			
		||||
  addSbt "++ $1"
 | 
			
		||||
}
 | 
			
		||||
setJavaHome () {
 | 
			
		||||
  java_cmd="$1/bin/java"
 | 
			
		||||
  setThisBuild javaHome "_root_.scala.Some(file(\"$1\"))"
 | 
			
		||||
  export JAVA_HOME="$1"
 | 
			
		||||
  export JDK_HOME="$1"
 | 
			
		||||
  export PATH="$JAVA_HOME/bin:$PATH"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# some non-read-onlies set with defaults
 | 
			
		||||
declare java_cmd="java"
 | 
			
		||||
declare sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)"
 | 
			
		||||
declare jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)"
 | 
			
		||||
declare sbt_launch_repo="http://typesafe.artifactoryonline.com/typesafe/ivy-releases"
 | 
			
		||||
getJavaVersion() { "$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d \"; }
 | 
			
		||||
 | 
			
		||||
# pull -J and -D options to give to java.
 | 
			
		||||
declare -a residual_args
 | 
			
		||||
declare -a java_args
 | 
			
		||||
declare -a scalac_args
 | 
			
		||||
declare -a sbt_commands
 | 
			
		||||
checkJava() {
 | 
			
		||||
  # Warn if there is a Java version mismatch between PATH and JAVA_HOME/JDK_HOME
 | 
			
		||||
 | 
			
		||||
# args to jvm/sbt via files or environment variables
 | 
			
		||||
declare -a extra_jvm_opts extra_sbt_opts
 | 
			
		||||
  [[ -n "$JAVA_HOME" && -e "$JAVA_HOME/bin/java"     ]] && java="$JAVA_HOME/bin/java"
 | 
			
		||||
  [[ -n "$JDK_HOME"  && -e "$JDK_HOME/lib/tools.jar" ]] && java="$JDK_HOME/bin/java"
 | 
			
		||||
 | 
			
		||||
# if set, use JAVA_HOME over java found in path
 | 
			
		||||
[[ -e "$JAVA_HOME/bin/java" ]] && java_cmd="$JAVA_HOME/bin/java"
 | 
			
		||||
 | 
			
		||||
# directory to store sbt launchers
 | 
			
		||||
declare sbt_launch_dir="$HOME/.sbt/launchers"
 | 
			
		||||
[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir"
 | 
			
		||||
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers.XXXXXX)"
 | 
			
		||||
  if [[ -n "$java" ]]; then
 | 
			
		||||
    pathJavaVersion=$(getJavaVersion java)
 | 
			
		||||
    homeJavaVersion=$(getJavaVersion "$java")
 | 
			
		||||
    if [[ "$pathJavaVersion" != "$homeJavaVersion" ]]; then
 | 
			
		||||
      echoerr "Warning: Java version mismatch between PATH and JAVA_HOME/JDK_HOME, sbt will use the one in PATH"
 | 
			
		||||
      echoerr "  Either: fix your PATH, remove JAVA_HOME/JDK_HOME or use -java-home"
 | 
			
		||||
      echoerr "  java version from PATH:               $pathJavaVersion"
 | 
			
		||||
      echoerr "  java version from JAVA_HOME/JDK_HOME: $homeJavaVersion"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
java_version () {
 | 
			
		||||
  local version=$("$java_cmd" -version 2>&1 | grep -e 'java version' | awk '{ print $3 }' | tr -d \")
 | 
			
		||||
  local version=$(getJavaVersion "$java_cmd")
 | 
			
		||||
  vlog "Detected Java version: $version"
 | 
			
		||||
  echo "${version:2:1}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# MaxPermSize critical on pre-8 jvms but incurs noisy warning on 8+
 | 
			
		||||
# MaxPermSize critical on pre-8 JVMs but incurs noisy warning on 8+
 | 
			
		||||
default_jvm_opts () {
 | 
			
		||||
  local v="$(java_version)"
 | 
			
		||||
  if [[ $v -ge 8 ]]; then
 | 
			
		||||
@ -173,16 +231,23 @@ execRunner () {
 | 
			
		||||
    vlog ""
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  [[ -n "$batch" ]] && exec </dev/null
 | 
			
		||||
  exec "$@"
 | 
			
		||||
  setTrapExit
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$batch" ]]; then
 | 
			
		||||
    "$@" < /dev/null
 | 
			
		||||
  else
 | 
			
		||||
    "$@"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar_url () {
 | 
			
		||||
  make_url "$1"
 | 
			
		||||
}
 | 
			
		||||
jar_url ()  { make_url "$1"; }
 | 
			
		||||
 | 
			
		||||
is_cygwin () [[ "$(uname -a)" == "CYGWIN"* ]]
 | 
			
		||||
 | 
			
		||||
jar_file () {
 | 
			
		||||
  echo "$sbt_launch_dir/$1/sbt-launch.jar"
 | 
			
		||||
  is_cygwin \
 | 
			
		||||
  && echo "$(cygpath -w $sbt_launch_dir/"$1"/sbt-launch.jar)" \
 | 
			
		||||
  || echo "$sbt_launch_dir/$1/sbt-launch.jar"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
download_url () {
 | 
			
		||||
@ -195,21 +260,28 @@ download_url () {
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${jar%/*}" && {
 | 
			
		||||
    if which curl >/dev/null; then
 | 
			
		||||
      curl --fail --silent "$url" --output "$jar"
 | 
			
		||||
      curl --fail --silent --location "$url" --output "$jar"
 | 
			
		||||
    elif which wget >/dev/null; then
 | 
			
		||||
      wget --quiet -O "$jar" "$url"
 | 
			
		||||
      wget -q -O "$jar" "$url"
 | 
			
		||||
    fi
 | 
			
		||||
  } && [[ -r "$jar" ]]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
acquire_sbt_jar () {
 | 
			
		||||
  sbt_url="$(jar_url "$sbt_version")"
 | 
			
		||||
  sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
 | 
			
		||||
  [[ -r "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar"
 | 
			
		||||
  {
 | 
			
		||||
    sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
    [[ -r "$sbt_jar" ]]
 | 
			
		||||
  } || {
 | 
			
		||||
    sbt_jar="$HOME/.ivy2/local/org.scala-sbt/sbt-launch/$sbt_version/jars/sbt-launch.jar"
 | 
			
		||||
    [[ -r "$sbt_jar" ]]
 | 
			
		||||
  } || {
 | 
			
		||||
    sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
    download_url "$(make_url "$sbt_version")" "$sbt_jar"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
usage () {
 | 
			
		||||
  set_sbt_version
 | 
			
		||||
  cat <<EOM
 | 
			
		||||
Usage: $script_name [options]
 | 
			
		||||
 | 
			
		||||
@ -240,20 +312,23 @@ runner with the -x option.
 | 
			
		||||
  -jvm-debug <port>  Turn on JVM debugging, open at the given port.
 | 
			
		||||
  -batch             Disable interactive mode
 | 
			
		||||
  -prompt <expr>     Set the sbt prompt; in expr, 's' is the State and 'e' is Extracted
 | 
			
		||||
  -script <file>     Run the specified file as a scala script
 | 
			
		||||
 | 
			
		||||
  # sbt version (default: sbt.version from $buildProps if present, otherwise $sbt_release_version)
 | 
			
		||||
  -sbt-force-latest         force the use of the latest release of sbt: $sbt_release_version
 | 
			
		||||
  -sbt-version  <version>   use the specified version of sbt (default: $sbt_release_version)
 | 
			
		||||
  -sbt-dev                  use the latest pre-release version of sbt: $sbt_unreleased_version
 | 
			
		||||
  -sbt-jar      <path>      use the specified jar as the sbt launcher
 | 
			
		||||
  -sbt-launch-dir <path>    directory to hold sbt launchers (default: ~/.sbt/launchers)
 | 
			
		||||
  -sbt-launch-repo <url>    repo url for downloading sbt launcher jar (default: $sbt_launch_repo)
 | 
			
		||||
  -sbt-launch-dir <path>    directory to hold sbt launchers (default: $sbt_launch_dir)
 | 
			
		||||
  -sbt-launch-repo <url>    repo url for downloading sbt launcher jar (default: $(url_base "$sbt_version"))
 | 
			
		||||
 | 
			
		||||
  # scala version (default: as chosen by sbt)
 | 
			
		||||
  -28                       use $latest_28
 | 
			
		||||
  -29                       use $latest_29
 | 
			
		||||
  -210                      use $latest_210
 | 
			
		||||
  -211                      use $latest_211
 | 
			
		||||
  -212                      use $latest_212
 | 
			
		||||
  -213                      use $latest_213
 | 
			
		||||
  -scala-home <path>        use the scala build at the specified directory
 | 
			
		||||
  -scala-version <version>  use the specified version of scala
 | 
			
		||||
  -binary-version <version> use the specified scala version when searching for dependencies
 | 
			
		||||
@ -280,42 +355,7 @@ runner with the -x option.
 | 
			
		||||
EOM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
addJava () {
 | 
			
		||||
  vlog "[addJava] arg = '$1'"
 | 
			
		||||
  java_args=( "${java_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addSbt () {
 | 
			
		||||
  vlog "[addSbt] arg = '$1'"
 | 
			
		||||
  sbt_commands=( "${sbt_commands[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
setThisBuild () {
 | 
			
		||||
  vlog "[addBuild] args = '$@'"
 | 
			
		||||
  local key="$1" && shift
 | 
			
		||||
  addSbt "set $key in ThisBuild := $@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
addScalac () {
 | 
			
		||||
  vlog "[addScalac] arg = '$1'"
 | 
			
		||||
  scalac_args=( "${scalac_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addResidual () {
 | 
			
		||||
  vlog "[residual] arg = '$1'"
 | 
			
		||||
  residual_args=( "${residual_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addResolver () {
 | 
			
		||||
  addSbt "set resolvers += $1"
 | 
			
		||||
}
 | 
			
		||||
addDebugger () {
 | 
			
		||||
  addJava "-Xdebug"
 | 
			
		||||
  addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
 | 
			
		||||
}
 | 
			
		||||
setScalaVersion () {
 | 
			
		||||
  [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")'
 | 
			
		||||
  addSbt "++ $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
process_args ()
 | 
			
		||||
{
 | 
			
		||||
process_args () {
 | 
			
		||||
  require_arg () {
 | 
			
		||||
    local type="$1"
 | 
			
		||||
    local opt="$2"
 | 
			
		||||
@ -327,10 +367,10 @@ process_args ()
 | 
			
		||||
  }
 | 
			
		||||
  while [[ $# -gt 0 ]]; do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
          -h|-help) usage; exit 1 ;;
 | 
			
		||||
          -h|-help) usage; exit 0 ;;
 | 
			
		||||
                -v) verbose=true && shift ;;
 | 
			
		||||
                -d) addSbt "--debug" && shift ;;
 | 
			
		||||
                -w) addSbt "--warn" && shift ;;
 | 
			
		||||
                -w) addSbt "--warn"  && shift ;;
 | 
			
		||||
                -q) addSbt "--error" && shift ;;
 | 
			
		||||
                -x) debugUs=true && shift ;;
 | 
			
		||||
            -trace) require_arg integer "$1" "$2" && trace_level="$2" && shift 2 ;;
 | 
			
		||||
@ -340,10 +380,11 @@ process_args ()
 | 
			
		||||
         -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;;
 | 
			
		||||
          -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;;
 | 
			
		||||
        -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;;
 | 
			
		||||
          -offline) addSbt "set offline := true" && shift ;;
 | 
			
		||||
          -offline) addSbt "set offline in Global := true" && shift ;;
 | 
			
		||||
        -jvm-debug) require_arg port "$1" "$2" && addDebugger "$2" && shift 2 ;;
 | 
			
		||||
            -batch) batch=true && shift ;;
 | 
			
		||||
           -prompt) require_arg "expr" "$1" "$2" && setThisBuild shellPrompt "(s => { val e = Project.extract(s) ; $2 })" && shift 2 ;;
 | 
			
		||||
           -script) require_arg file "$1" "$2" && sbt_script="$2" && addJava "-Dsbt.main.class=sbt.ScriptMain" && shift 2 ;;
 | 
			
		||||
 | 
			
		||||
       -sbt-create) sbt_create=true && shift ;;
 | 
			
		||||
          -sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
 | 
			
		||||
@ -354,8 +395,8 @@ process_args ()
 | 
			
		||||
  -sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;;
 | 
			
		||||
    -scala-version) require_arg version "$1" "$2" && setScalaVersion "$2" && shift 2 ;;
 | 
			
		||||
   -binary-version) require_arg version "$1" "$2" && setThisBuild scalaBinaryVersion "\"$2\"" && shift 2 ;;
 | 
			
		||||
       -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "Some(file(\"$2\"))" && shift 2 ;;
 | 
			
		||||
        -java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;;
 | 
			
		||||
       -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "_root_.scala.Some(file(\"$2\"))" && shift 2 ;;
 | 
			
		||||
        -java-home) require_arg path "$1" "$2" && setJavaHome "$2" && shift 2 ;;
 | 
			
		||||
         -sbt-opts) require_arg path "$1" "$2" && sbt_opts_file="$2" && shift 2 ;;
 | 
			
		||||
         -jvm-opts) require_arg path "$1" "$2" && jvm_opts_file="$2" && shift 2 ;;
 | 
			
		||||
 | 
			
		||||
@ -366,7 +407,9 @@ process_args ()
 | 
			
		||||
               -29) setScalaVersion "$latest_29" && shift ;;
 | 
			
		||||
              -210) setScalaVersion "$latest_210" && shift ;;
 | 
			
		||||
              -211) setScalaVersion "$latest_211" && shift ;;
 | 
			
		||||
 | 
			
		||||
              -212) setScalaVersion "$latest_212" && shift ;;
 | 
			
		||||
              -213) setScalaVersion "$latest_213" && shift ;;
 | 
			
		||||
               new) sbt_new=true && : ${sbt_explicit_version:=$sbt_release_version} && addResidual "$1" && shift ;;
 | 
			
		||||
                 *) addResidual "$1" && shift ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
@ -377,8 +420,10 @@ process_args "$@"
 | 
			
		||||
 | 
			
		||||
# skip #-styled comments and blank lines
 | 
			
		||||
readConfigFile() {
 | 
			
		||||
  while read line; do
 | 
			
		||||
    [[ $line =~ ^# ]] || [[ -z $line ]] || echo "$line"
 | 
			
		||||
  local end=false
 | 
			
		||||
  until $end; do
 | 
			
		||||
    read || end=true
 | 
			
		||||
    [[ $REPLY =~ ^# ]] || [[ -z $REPLY ]] || echo "$REPLY"
 | 
			
		||||
  done < "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -403,6 +448,8 @@ argumentCount=$#
 | 
			
		||||
# set sbt version
 | 
			
		||||
set_sbt_version
 | 
			
		||||
 | 
			
		||||
checkJava
 | 
			
		||||
 | 
			
		||||
# only exists in 0.12+
 | 
			
		||||
setTraceLevel() {
 | 
			
		||||
  case "$sbt_version" in
 | 
			
		||||
@ -415,19 +462,21 @@ setTraceLevel() {
 | 
			
		||||
[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[@]}\""
 | 
			
		||||
 | 
			
		||||
# Update build.properties on disk to set explicit version - sbt gives us no choice
 | 
			
		||||
[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version"
 | 
			
		||||
[[ -n "$sbt_explicit_version" && -z "$sbt_new" ]] && update_build_props_sbt "$sbt_explicit_version"
 | 
			
		||||
vlog "Detected sbt version $sbt_version"
 | 
			
		||||
 | 
			
		||||
[[ -n "$scala_version" ]] && vlog "Overriding scala version to $scala_version"
 | 
			
		||||
if [[ -n "$sbt_script" ]]; then
 | 
			
		||||
  residual_args=( $sbt_script ${residual_args[@]} )
 | 
			
		||||
else
 | 
			
		||||
  # no args - alert them there's stuff in here
 | 
			
		||||
  (( argumentCount > 0 )) || {
 | 
			
		||||
    vlog "Starting $script_name: invoke with -help for other options"
 | 
			
		||||
    residual_args=( shell )
 | 
			
		||||
  }
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# no args - alert them there's stuff in here
 | 
			
		||||
(( argumentCount > 0 )) || {
 | 
			
		||||
  vlog "Starting $script_name: invoke with -help for other options"
 | 
			
		||||
  residual_args=( shell )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# verify this is an sbt dir or -create was given
 | 
			
		||||
[[ -r ./build.sbt || -d ./project || -n "$sbt_create" ]] || {
 | 
			
		||||
# verify this is an sbt dir, -create was given or user attempts to run a scala script
 | 
			
		||||
[[ -r ./build.sbt || -d ./project || -n "$sbt_create" || -n "$sbt_script" || -n "$sbt_new" ]] || {
 | 
			
		||||
  cat <<EOM
 | 
			
		||||
$(pwd) doesn't appear to be an sbt project.
 | 
			
		||||
If you want to start sbt anyway, run:
 | 
			
		||||
@ -440,6 +489,10 @@ EOM
 | 
			
		||||
# pick up completion if present; todo
 | 
			
		||||
[[ -r .sbt_completion.sh ]] && source .sbt_completion.sh
 | 
			
		||||
 | 
			
		||||
# directory to store sbt launchers
 | 
			
		||||
[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir"
 | 
			
		||||
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers.XXXXXX)"
 | 
			
		||||
 | 
			
		||||
# no jar? download it.
 | 
			
		||||
[[ -r "$sbt_jar" ]] || acquire_sbt_jar || {
 | 
			
		||||
  # still no jar? uh-oh.
 | 
			
		||||
@ -501,8 +554,8 @@ mainFiltered () {
 | 
			
		||||
 | 
			
		||||
  echoLine () {
 | 
			
		||||
    local line="$1"
 | 
			
		||||
    local line1="$(echo "$line" | sed -r 's/\r\x1BM\x1B\[2K//g')"       # This strips the OverwriteLine code.
 | 
			
		||||
    local line2="$(echo "$line1" | sed -r 's/\x1B\[[0-9;]*[JKmsu]//g')" # This strips all codes - we test regexes against this.
 | 
			
		||||
    local line1="$(echo "$line" | sed 's/\r\x1BM\x1B\[2K//g')"       # This strips the OverwriteLine code.
 | 
			
		||||
    local line2="$(echo "$line1" | sed 's/\x1B\[[0-9;]*[JKmsu]//g')" # This strips all codes - we test regexes against this.
 | 
			
		||||
 | 
			
		||||
    if [[ $line2 =~ $excludeRegex ]]; then
 | 
			
		||||
      [[ -n $debugUs ]] && echo "[X] $line1"
 | 
			
		||||
 | 
			
		||||
@ -1,17 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
 | 
			
		||||
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 | 
			
		||||
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 | 
			
		||||
  version="3.0">
 | 
			
		||||
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
 | 
			
		||||
  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 | 
			
		||||
  version="3.1">
 | 
			
		||||
 | 
			
		||||
  <!-- 
 | 
			
		||||
    This listener loads a class in the default package called Scalatra.
 | 
			
		||||
    That class should should implement org.scalatra.LifeCycle.  Your app
 | 
			
		||||
    can be configured in Scala code there.
 | 
			
		||||
  -->
 | 
			
		||||
  <listener>
 | 
			
		||||
    <listener-class>org.scalatra.servlet.ScalatraListener</listener-class>
 | 
			
		||||
  </listener>
 | 
			
		||||
 | 
			
		||||
  <servlet-mapping>
 | 
			
		||||
    <servlet-name>default</servlet-name>
 | 
			
		||||
    <url-pattern>/*.html</url-pattern>
 | 
			
		||||
    <url-pattern>/css/*</url-pattern>
 | 
			
		||||
    <url-pattern>/js/*.js</url-pattern>
 | 
			
		||||
    <url-pattern>/images/*</url-pattern>
 | 
			
		||||
  </servlet-mapping>
 | 
			
		||||
</web-app>
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
2.2.3-SNAPSHOT
 | 
			
		||||
2.3.1-SNAPSHOT
 | 
			
		||||
@ -5,6 +5,4 @@ This server was generated by the [swagger-codegen](https://github.com/swagger-ap
 | 
			
		||||
[OpenAPI-Spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub.  This
 | 
			
		||||
is an example of building a swagger-enabled scalatra server.
 | 
			
		||||
 | 
			
		||||
This example uses the [scalatra](http://scalatra.org/) framework.  To see how to make this your own, look here:
 | 
			
		||||
 | 
			
		||||
[README](https://github.com/swagger-api/swagger-codegen/tree/master/samples/server-generator/scalatra)
 | 
			
		||||
This example uses the [scalatra](http://scalatra.org/) framework.
 | 
			
		||||
 | 
			
		||||
@ -1,64 +1,21 @@
 | 
			
		||||
import AssemblyKeys._ // put this at the top of the file
 | 
			
		||||
 | 
			
		||||
import NativePackagerKeys._
 | 
			
		||||
 | 
			
		||||
packageArchetype.java_server
 | 
			
		||||
 | 
			
		||||
assemblySettings
 | 
			
		||||
 | 
			
		||||
scalariformSettings
 | 
			
		||||
 | 
			
		||||
organization := "io.swagger"
 | 
			
		||||
 | 
			
		||||
seq(webSettings :_*)
 | 
			
		||||
name := "scalatra-sample"
 | 
			
		||||
version := "0.1.0-SNAPSHOT"
 | 
			
		||||
scalaVersion := "2.12.4"
 | 
			
		||||
 | 
			
		||||
mainClass in assembly := Some("JettyMain")
 | 
			
		||||
 | 
			
		||||
name := "scalatra-sample"
 | 
			
		||||
 | 
			
		||||
version := "0.1.0-SNAPSHOT"
 | 
			
		||||
 | 
			
		||||
scalaVersion := "2.11.2"
 | 
			
		||||
 | 
			
		||||
scalacOptions += "-language:postfixOps"
 | 
			
		||||
val ScalatraVersion = "2.6.2"
 | 
			
		||||
 | 
			
		||||
libraryDependencies ++= Seq(
 | 
			
		||||
  "org.scalatest"           %% "scalatest"                      % "2.2.1"               % "test",
 | 
			
		||||
  "org.scalatra"            %% "scalatra"                       % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-scalate"               % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-json"                  % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-swagger"               % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-swagger-ext"           % "2.3.0.RC3",
 | 
			
		||||
  "org.scalatra"            %% "scalatra-slf4j"                 % "2.3.0.RC3",
 | 
			
		||||
  "org.json4s"              %% "json4s-jackson"                 % "3.2.10",
 | 
			
		||||
  "org.json4s"              %% "json4s-ext"                     % "3.2.10",
 | 
			
		||||
  "commons-codec"            % "commons-codec"                  % "1.7",
 | 
			
		||||
  "net.databinder.dispatch" %% "dispatch-core"                  % "0.11.2",
 | 
			
		||||
  //"net.databinder.dispatch" %% "json4s-jackson"                 % "0.11.2",
 | 
			
		||||
  "net.databinder.dispatch" %% "dispatch-json4s-jackson"        % "0.11.2",
 | 
			
		||||
  "com.typesafe.akka"       %% "akka-actor"                     % "2.3.6",
 | 
			
		||||
  "org.eclipse.jetty"        % "jetty-server"                   % "9.2.3.v20140905" % "container;compile;test",
 | 
			
		||||
  "org.eclipse.jetty"        % "jetty-webapp"                   % "9.2.3.v20140905" % "container;compile;test",
 | 
			
		||||
  "org.eclipse.jetty.orbit"  % "javax.servlet"                  % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
 | 
			
		||||
  "org.scalatra"      %% "scalatra"             % ScalatraVersion,
 | 
			
		||||
  "org.scalatra"      %% "scalatra-swagger"     % ScalatraVersion,
 | 
			
		||||
  "org.scalatra"      %% "scalatra-scalatest"   % ScalatraVersion % Test,
 | 
			
		||||
  "org.json4s"        %% "json4s-jackson"       % "3.5.0",
 | 
			
		||||
  "org.eclipse.jetty" %  "jetty-server"         % "9.4.8.v20171121",
 | 
			
		||||
  "org.eclipse.jetty" %  "jetty-webapp"         % "9.4.8.v20171121",
 | 
			
		||||
  "javax.servlet"     %  "javax.servlet-api"    % "3.1.0",
 | 
			
		||||
  "ch.qos.logback"    %  "logback-classic"      % "1.2.3" % Provided
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
 | 
			
		||||
 | 
			
		||||
resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
 | 
			
		||||
 | 
			
		||||
resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"
 | 
			
		||||
 | 
			
		||||
ivyXML := <dependencies>
 | 
			
		||||
    <exclude module="slf4j-log4j12"/>
 | 
			
		||||
    <exclude module="grizzled-slf4j_2.9.1"/>
 | 
			
		||||
    <exclude module="jsr311-api" />
 | 
			
		||||
  </dependencies>
 | 
			
		||||
 | 
			
		||||
mergeStrategy in assembly <<= (mergeStrategy in assembly) {
 | 
			
		||||
  (old) => {
 | 
			
		||||
    case "about.html"     => MergeStrategy.discard
 | 
			
		||||
    case x => old(x)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
net.virtualvoid.sbt.graph.Plugin.graphSettings
 | 
			
		||||
enablePlugins(JettyPlugin)
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
sbt.version=0.13.5
 | 
			
		||||
sbt.version=1.1.0
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,3 @@
 | 
			
		||||
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.10.1")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.5")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "0.9.0")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.3.0")
 | 
			
		||||
 | 
			
		||||
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4")
 | 
			
		||||
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
 | 
			
		||||
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.0.1")
 | 
			
		||||
addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2")
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										373
									
								
								samples/server/petstore/scalatra/sbt
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										373
									
								
								samples/server/petstore/scalatra/sbt
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -1,25 +1,100 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# A more capable sbt runner, coincidentally also called sbt.
 | 
			
		||||
# Author: Paul Phillips <paulp@typesafe.com>
 | 
			
		||||
# Author: Paul Phillips <paulp@improving.org>
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
declare -r sbt_release_version="0.13.16"
 | 
			
		||||
declare -r sbt_unreleased_version="0.13.16"
 | 
			
		||||
 | 
			
		||||
declare -r latest_213="2.13.0-M2"
 | 
			
		||||
declare -r latest_212="2.12.4"
 | 
			
		||||
declare -r latest_211="2.11.12"
 | 
			
		||||
declare -r latest_210="2.10.7"
 | 
			
		||||
declare -r latest_29="2.9.3"
 | 
			
		||||
declare -r latest_28="2.8.2"
 | 
			
		||||
 | 
			
		||||
# todo - make this dynamic
 | 
			
		||||
declare -r sbt_release_version="0.13.6"
 | 
			
		||||
declare -r sbt_unreleased_version="0.13.6"
 | 
			
		||||
declare -r buildProps="project/build.properties"
 | 
			
		||||
 | 
			
		||||
declare sbt_jar sbt_dir sbt_create sbt_version
 | 
			
		||||
declare scala_version sbt_explicit_version
 | 
			
		||||
declare verbose noshare batch trace_level log_level
 | 
			
		||||
declare sbt_saved_stty debugUs
 | 
			
		||||
declare -r sbt_launch_ivy_release_repo="http://repo.typesafe.com/typesafe/ivy-releases"
 | 
			
		||||
declare -r sbt_launch_ivy_snapshot_repo="https://repo.scala-sbt.org/scalasbt/ivy-snapshots"
 | 
			
		||||
declare -r sbt_launch_mvn_release_repo="http://repo.scala-sbt.org/scalasbt/maven-releases"
 | 
			
		||||
declare -r sbt_launch_mvn_snapshot_repo="http://repo.scala-sbt.org/scalasbt/maven-snapshots"
 | 
			
		||||
 | 
			
		||||
declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m"
 | 
			
		||||
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
 | 
			
		||||
 | 
			
		||||
declare sbt_jar sbt_dir sbt_create sbt_version sbt_script sbt_new
 | 
			
		||||
declare sbt_explicit_version
 | 
			
		||||
declare verbose noshare batch trace_level
 | 
			
		||||
declare debugUs
 | 
			
		||||
 | 
			
		||||
declare java_cmd="java"
 | 
			
		||||
declare sbt_launch_dir="$HOME/.sbt/launchers"
 | 
			
		||||
declare sbt_launch_repo
 | 
			
		||||
 | 
			
		||||
# pull -J and -D options to give to java.
 | 
			
		||||
declare -a java_args scalac_args sbt_commands residual_args
 | 
			
		||||
 | 
			
		||||
# args to jvm/sbt via files or environment variables
 | 
			
		||||
declare -a extra_jvm_opts extra_sbt_opts
 | 
			
		||||
 | 
			
		||||
echoerr () { echo >&2 "$@"; }
 | 
			
		||||
vlog ()    { [[ -n "$verbose" ]] && echoerr "$@"; }
 | 
			
		||||
die ()     { echo "Aborting: $@" ; exit 1; }
 | 
			
		||||
 | 
			
		||||
setTrapExit () {
 | 
			
		||||
  # save stty and trap exit, to ensure echo is re-enabled if we are interrupted.
 | 
			
		||||
  export SBT_STTY="$(stty -g 2>/dev/null)"
 | 
			
		||||
 | 
			
		||||
  # restore stty settings (echo in particular)
 | 
			
		||||
  onSbtRunnerExit() {
 | 
			
		||||
    [ -t 0 ] || return
 | 
			
		||||
    vlog ""
 | 
			
		||||
    vlog "restoring stty: $SBT_STTY"
 | 
			
		||||
    stty "$SBT_STTY"
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  vlog "saving stty: $SBT_STTY"
 | 
			
		||||
  trap onSbtRunnerExit EXIT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# this seems to cover the bases on OSX, and someone will
 | 
			
		||||
# have to tell me about the others.
 | 
			
		||||
get_script_path () {
 | 
			
		||||
  local path="$1"
 | 
			
		||||
  [[ -L "$path" ]] || { echo "$path" ; return; }
 | 
			
		||||
 | 
			
		||||
  local target="$(readlink "$path")"
 | 
			
		||||
  if [[ "${target:0:1}" == "/" ]]; then
 | 
			
		||||
    echo "$target"
 | 
			
		||||
  else
 | 
			
		||||
    echo "${path%/*}/$target"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -r script_path="$(get_script_path "$BASH_SOURCE")"
 | 
			
		||||
declare -r script_name="${script_path##*/}"
 | 
			
		||||
 | 
			
		||||
init_default_option_file () {
 | 
			
		||||
  local overriding_var="${!1}"
 | 
			
		||||
  local default_file="$2"
 | 
			
		||||
  if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then
 | 
			
		||||
    local envvar_file="${BASH_REMATCH[1]}"
 | 
			
		||||
    if [[ -r "$envvar_file" ]]; then
 | 
			
		||||
      default_file="$envvar_file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  echo "$default_file"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)"
 | 
			
		||||
declare jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)"
 | 
			
		||||
 | 
			
		||||
# spaces are possible, e.g. sbt.version = 0.13.0
 | 
			
		||||
build_props_sbt () {
 | 
			
		||||
  [[ -r "$buildProps" ]] && \
 | 
			
		||||
    grep '^sbt\.version' "$buildProps" | tr '=' ' ' | awk '{ print $2; }'
 | 
			
		||||
    grep '^sbt\.version' "$buildProps" | tr '=\r' ' ' | awk '{ print $2; }'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
update_build_props_sbt () {
 | 
			
		||||
@ -43,104 +118,87 @@ set_sbt_version () {
 | 
			
		||||
  export sbt_version
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# restore stty settings (echo in particular)
 | 
			
		||||
onSbtRunnerExit() {
 | 
			
		||||
  [[ -n "$sbt_saved_stty" ]] || return
 | 
			
		||||
  vlog ""
 | 
			
		||||
  vlog "restoring stty: $sbt_saved_stty"
 | 
			
		||||
  stty "$sbt_saved_stty"
 | 
			
		||||
  unset sbt_saved_stty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# save stty and trap exit, to ensure echo is reenabled if we are interrupted.
 | 
			
		||||
trap onSbtRunnerExit EXIT
 | 
			
		||||
sbt_saved_stty="$(stty -g 2>/dev/null)"
 | 
			
		||||
vlog "Saved stty: $sbt_saved_stty"
 | 
			
		||||
 | 
			
		||||
# this seems to cover the bases on OSX, and someone will
 | 
			
		||||
# have to tell me about the others.
 | 
			
		||||
get_script_path () {
 | 
			
		||||
  local path="$1"
 | 
			
		||||
  [[ -L "$path" ]] || { echo "$path" ; return; }
 | 
			
		||||
 | 
			
		||||
  local target="$(readlink "$path")"
 | 
			
		||||
  if [[ "${target:0:1}" == "/" ]]; then
 | 
			
		||||
    echo "$target"
 | 
			
		||||
  else
 | 
			
		||||
    echo "${path%/*}/$target"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die() {
 | 
			
		||||
  echo "Aborting: $@"
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
make_url () {
 | 
			
		||||
  version="$1"
 | 
			
		||||
url_base () {
 | 
			
		||||
  local version="$1"
 | 
			
		||||
 | 
			
		||||
  case "$version" in
 | 
			
		||||
        0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;;
 | 
			
		||||
      0.10.* ) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
    0.11.[12]) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
            *) echo "$sbt_launch_repo/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
        0.7.*) echo "http://simple-build-tool.googlecode.com" ;;
 | 
			
		||||
      0.10.* ) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    0.11.[12]) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    0.*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmdd-hhMMss"
 | 
			
		||||
               echo "$sbt_launch_ivy_snapshot_repo" ;;
 | 
			
		||||
          0.*) echo "$sbt_launch_ivy_release_repo" ;;
 | 
			
		||||
    *-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]) # ie "*-yyyymmdd-hhMMss"
 | 
			
		||||
               echo "$sbt_launch_mvn_snapshot_repo" ;;
 | 
			
		||||
            *) echo "$sbt_launch_mvn_release_repo" ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
init_default_option_file () {
 | 
			
		||||
  local overriding_var="${!1}"
 | 
			
		||||
  local default_file="$2"
 | 
			
		||||
  if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then
 | 
			
		||||
    local envvar_file="${BASH_REMATCH[1]}"
 | 
			
		||||
    if [[ -r "$envvar_file" ]]; then
 | 
			
		||||
      default_file="$envvar_file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  echo "$default_file"
 | 
			
		||||
make_url () {
 | 
			
		||||
  local version="$1"
 | 
			
		||||
 | 
			
		||||
  local base="${sbt_launch_repo:-$(url_base "$version")}"
 | 
			
		||||
 | 
			
		||||
  case "$version" in
 | 
			
		||||
        0.7.*) echo "$base/files/sbt-launch-0.7.7.jar" ;;
 | 
			
		||||
      0.10.* ) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
    0.11.[12]) echo "$base/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
          0.*) echo "$base/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
            *) echo "$base/org/scala-sbt/sbt-launch/$version/sbt-launch.jar" ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -r cms_opts="-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC"
 | 
			
		||||
declare -r jit_opts="-XX:ReservedCodeCacheSize=256m -XX:+TieredCompilation"
 | 
			
		||||
declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m $jit_opts $cms_opts"
 | 
			
		||||
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
 | 
			
		||||
declare -r latest_28="2.8.2"
 | 
			
		||||
declare -r latest_29="2.9.3"
 | 
			
		||||
declare -r latest_210="2.10.4"
 | 
			
		||||
declare -r latest_211="2.11.2"
 | 
			
		||||
addJava ()     { vlog "[addJava] arg = '$1'"   ;     java_args+=("$1"); }
 | 
			
		||||
addSbt ()      { vlog "[addSbt] arg = '$1'"    ;  sbt_commands+=("$1"); }
 | 
			
		||||
addScalac ()   { vlog "[addScalac] arg = '$1'" ;   scalac_args+=("$1"); }
 | 
			
		||||
addResidual () { vlog "[residual] arg = '$1'"  ; residual_args+=("$1"); }
 | 
			
		||||
 | 
			
		||||
declare -r script_path="$(get_script_path "$BASH_SOURCE")"
 | 
			
		||||
declare -r script_name="${script_path##*/}"
 | 
			
		||||
addResolver () { addSbt "set resolvers += $1"; }
 | 
			
		||||
addDebugger () { addJava "-Xdebug" ; addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; }
 | 
			
		||||
setThisBuild () {
 | 
			
		||||
  vlog "[addBuild] args = '$@'"
 | 
			
		||||
  local key="$1" && shift
 | 
			
		||||
  addSbt "set $key in ThisBuild := $@"
 | 
			
		||||
}
 | 
			
		||||
setScalaVersion () {
 | 
			
		||||
  [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")'
 | 
			
		||||
  addSbt "++ $1"
 | 
			
		||||
}
 | 
			
		||||
setJavaHome () {
 | 
			
		||||
  java_cmd="$1/bin/java"
 | 
			
		||||
  setThisBuild javaHome "_root_.scala.Some(file(\"$1\"))"
 | 
			
		||||
  export JAVA_HOME="$1"
 | 
			
		||||
  export JDK_HOME="$1"
 | 
			
		||||
  export PATH="$JAVA_HOME/bin:$PATH"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# some non-read-onlies set with defaults
 | 
			
		||||
declare java_cmd="java"
 | 
			
		||||
declare sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)"
 | 
			
		||||
declare jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)"
 | 
			
		||||
declare sbt_launch_repo="http://typesafe.artifactoryonline.com/typesafe/ivy-releases"
 | 
			
		||||
getJavaVersion() { "$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d \"; }
 | 
			
		||||
 | 
			
		||||
# pull -J and -D options to give to java.
 | 
			
		||||
declare -a residual_args
 | 
			
		||||
declare -a java_args
 | 
			
		||||
declare -a scalac_args
 | 
			
		||||
declare -a sbt_commands
 | 
			
		||||
checkJava() {
 | 
			
		||||
  # Warn if there is a Java version mismatch between PATH and JAVA_HOME/JDK_HOME
 | 
			
		||||
 | 
			
		||||
# args to jvm/sbt via files or environment variables
 | 
			
		||||
declare -a extra_jvm_opts extra_sbt_opts
 | 
			
		||||
  [[ -n "$JAVA_HOME" && -e "$JAVA_HOME/bin/java"     ]] && java="$JAVA_HOME/bin/java"
 | 
			
		||||
  [[ -n "$JDK_HOME"  && -e "$JDK_HOME/lib/tools.jar" ]] && java="$JDK_HOME/bin/java"
 | 
			
		||||
 | 
			
		||||
# if set, use JAVA_HOME over java found in path
 | 
			
		||||
[[ -e "$JAVA_HOME/bin/java" ]] && java_cmd="$JAVA_HOME/bin/java"
 | 
			
		||||
 | 
			
		||||
# directory to store sbt launchers
 | 
			
		||||
declare sbt_launch_dir="$HOME/.sbt/launchers"
 | 
			
		||||
[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir"
 | 
			
		||||
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers.XXXXXX)"
 | 
			
		||||
  if [[ -n "$java" ]]; then
 | 
			
		||||
    pathJavaVersion=$(getJavaVersion java)
 | 
			
		||||
    homeJavaVersion=$(getJavaVersion "$java")
 | 
			
		||||
    if [[ "$pathJavaVersion" != "$homeJavaVersion" ]]; then
 | 
			
		||||
      echoerr "Warning: Java version mismatch between PATH and JAVA_HOME/JDK_HOME, sbt will use the one in PATH"
 | 
			
		||||
      echoerr "  Either: fix your PATH, remove JAVA_HOME/JDK_HOME or use -java-home"
 | 
			
		||||
      echoerr "  java version from PATH:               $pathJavaVersion"
 | 
			
		||||
      echoerr "  java version from JAVA_HOME/JDK_HOME: $homeJavaVersion"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
java_version () {
 | 
			
		||||
  local version=$("$java_cmd" -version 2>&1 | grep -e 'java version' | awk '{ print $3 }' | tr -d \")
 | 
			
		||||
  local version=$(getJavaVersion "$java_cmd")
 | 
			
		||||
  vlog "Detected Java version: $version"
 | 
			
		||||
  echo "${version:2:1}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# MaxPermSize critical on pre-8 jvms but incurs noisy warning on 8+
 | 
			
		||||
# MaxPermSize critical on pre-8 JVMs but incurs noisy warning on 8+
 | 
			
		||||
default_jvm_opts () {
 | 
			
		||||
  local v="$(java_version)"
 | 
			
		||||
  if [[ $v -ge 8 ]]; then
 | 
			
		||||
@ -173,16 +231,23 @@ execRunner () {
 | 
			
		||||
    vlog ""
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  [[ -n "$batch" ]] && exec </dev/null
 | 
			
		||||
  exec "$@"
 | 
			
		||||
  setTrapExit
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$batch" ]]; then
 | 
			
		||||
    "$@" < /dev/null
 | 
			
		||||
  else
 | 
			
		||||
    "$@"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar_url () {
 | 
			
		||||
  make_url "$1"
 | 
			
		||||
}
 | 
			
		||||
jar_url ()  { make_url "$1"; }
 | 
			
		||||
 | 
			
		||||
is_cygwin () [[ "$(uname -a)" == "CYGWIN"* ]]
 | 
			
		||||
 | 
			
		||||
jar_file () {
 | 
			
		||||
  echo "$sbt_launch_dir/$1/sbt-launch.jar"
 | 
			
		||||
  is_cygwin \
 | 
			
		||||
  && echo "$(cygpath -w $sbt_launch_dir/"$1"/sbt-launch.jar)" \
 | 
			
		||||
  || echo "$sbt_launch_dir/$1/sbt-launch.jar"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
download_url () {
 | 
			
		||||
@ -195,21 +260,28 @@ download_url () {
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${jar%/*}" && {
 | 
			
		||||
    if which curl >/dev/null; then
 | 
			
		||||
      curl --fail --silent "$url" --output "$jar"
 | 
			
		||||
      curl --fail --silent --location "$url" --output "$jar"
 | 
			
		||||
    elif which wget >/dev/null; then
 | 
			
		||||
      wget --quiet -O "$jar" "$url"
 | 
			
		||||
      wget -q -O "$jar" "$url"
 | 
			
		||||
    fi
 | 
			
		||||
  } && [[ -r "$jar" ]]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
acquire_sbt_jar () {
 | 
			
		||||
  sbt_url="$(jar_url "$sbt_version")"
 | 
			
		||||
  sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
 | 
			
		||||
  [[ -r "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar"
 | 
			
		||||
  {
 | 
			
		||||
    sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
    [[ -r "$sbt_jar" ]]
 | 
			
		||||
  } || {
 | 
			
		||||
    sbt_jar="$HOME/.ivy2/local/org.scala-sbt/sbt-launch/$sbt_version/jars/sbt-launch.jar"
 | 
			
		||||
    [[ -r "$sbt_jar" ]]
 | 
			
		||||
  } || {
 | 
			
		||||
    sbt_jar="$(jar_file "$sbt_version")"
 | 
			
		||||
    download_url "$(make_url "$sbt_version")" "$sbt_jar"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
usage () {
 | 
			
		||||
  set_sbt_version
 | 
			
		||||
  cat <<EOM
 | 
			
		||||
Usage: $script_name [options]
 | 
			
		||||
 | 
			
		||||
@ -240,20 +312,23 @@ runner with the -x option.
 | 
			
		||||
  -jvm-debug <port>  Turn on JVM debugging, open at the given port.
 | 
			
		||||
  -batch             Disable interactive mode
 | 
			
		||||
  -prompt <expr>     Set the sbt prompt; in expr, 's' is the State and 'e' is Extracted
 | 
			
		||||
  -script <file>     Run the specified file as a scala script
 | 
			
		||||
 | 
			
		||||
  # sbt version (default: sbt.version from $buildProps if present, otherwise $sbt_release_version)
 | 
			
		||||
  -sbt-force-latest         force the use of the latest release of sbt: $sbt_release_version
 | 
			
		||||
  -sbt-version  <version>   use the specified version of sbt (default: $sbt_release_version)
 | 
			
		||||
  -sbt-dev                  use the latest pre-release version of sbt: $sbt_unreleased_version
 | 
			
		||||
  -sbt-jar      <path>      use the specified jar as the sbt launcher
 | 
			
		||||
  -sbt-launch-dir <path>    directory to hold sbt launchers (default: ~/.sbt/launchers)
 | 
			
		||||
  -sbt-launch-repo <url>    repo url for downloading sbt launcher jar (default: $sbt_launch_repo)
 | 
			
		||||
  -sbt-launch-dir <path>    directory to hold sbt launchers (default: $sbt_launch_dir)
 | 
			
		||||
  -sbt-launch-repo <url>    repo url for downloading sbt launcher jar (default: $(url_base "$sbt_version"))
 | 
			
		||||
 | 
			
		||||
  # scala version (default: as chosen by sbt)
 | 
			
		||||
  -28                       use $latest_28
 | 
			
		||||
  -29                       use $latest_29
 | 
			
		||||
  -210                      use $latest_210
 | 
			
		||||
  -211                      use $latest_211
 | 
			
		||||
  -212                      use $latest_212
 | 
			
		||||
  -213                      use $latest_213
 | 
			
		||||
  -scala-home <path>        use the scala build at the specified directory
 | 
			
		||||
  -scala-version <version>  use the specified version of scala
 | 
			
		||||
  -binary-version <version> use the specified scala version when searching for dependencies
 | 
			
		||||
@ -280,42 +355,7 @@ runner with the -x option.
 | 
			
		||||
EOM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
addJava () {
 | 
			
		||||
  vlog "[addJava] arg = '$1'"
 | 
			
		||||
  java_args=( "${java_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addSbt () {
 | 
			
		||||
  vlog "[addSbt] arg = '$1'"
 | 
			
		||||
  sbt_commands=( "${sbt_commands[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
setThisBuild () {
 | 
			
		||||
  vlog "[addBuild] args = '$@'"
 | 
			
		||||
  local key="$1" && shift
 | 
			
		||||
  addSbt "set $key in ThisBuild := $@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
addScalac () {
 | 
			
		||||
  vlog "[addScalac] arg = '$1'"
 | 
			
		||||
  scalac_args=( "${scalac_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addResidual () {
 | 
			
		||||
  vlog "[residual] arg = '$1'"
 | 
			
		||||
  residual_args=( "${residual_args[@]}" "$1" )
 | 
			
		||||
}
 | 
			
		||||
addResolver () {
 | 
			
		||||
  addSbt "set resolvers += $1"
 | 
			
		||||
}
 | 
			
		||||
addDebugger () {
 | 
			
		||||
  addJava "-Xdebug"
 | 
			
		||||
  addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
 | 
			
		||||
}
 | 
			
		||||
setScalaVersion () {
 | 
			
		||||
  [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")'
 | 
			
		||||
  addSbt "++ $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
process_args ()
 | 
			
		||||
{
 | 
			
		||||
process_args () {
 | 
			
		||||
  require_arg () {
 | 
			
		||||
    local type="$1"
 | 
			
		||||
    local opt="$2"
 | 
			
		||||
@ -327,10 +367,10 @@ process_args ()
 | 
			
		||||
  }
 | 
			
		||||
  while [[ $# -gt 0 ]]; do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
          -h|-help) usage; exit 1 ;;
 | 
			
		||||
          -h|-help) usage; exit 0 ;;
 | 
			
		||||
                -v) verbose=true && shift ;;
 | 
			
		||||
                -d) addSbt "--debug" && shift ;;
 | 
			
		||||
                -w) addSbt "--warn" && shift ;;
 | 
			
		||||
                -w) addSbt "--warn"  && shift ;;
 | 
			
		||||
                -q) addSbt "--error" && shift ;;
 | 
			
		||||
                -x) debugUs=true && shift ;;
 | 
			
		||||
            -trace) require_arg integer "$1" "$2" && trace_level="$2" && shift 2 ;;
 | 
			
		||||
@ -340,10 +380,11 @@ process_args ()
 | 
			
		||||
         -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;;
 | 
			
		||||
          -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;;
 | 
			
		||||
        -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;;
 | 
			
		||||
          -offline) addSbt "set offline := true" && shift ;;
 | 
			
		||||
          -offline) addSbt "set offline in Global := true" && shift ;;
 | 
			
		||||
        -jvm-debug) require_arg port "$1" "$2" && addDebugger "$2" && shift 2 ;;
 | 
			
		||||
            -batch) batch=true && shift ;;
 | 
			
		||||
           -prompt) require_arg "expr" "$1" "$2" && setThisBuild shellPrompt "(s => { val e = Project.extract(s) ; $2 })" && shift 2 ;;
 | 
			
		||||
           -script) require_arg file "$1" "$2" && sbt_script="$2" && addJava "-Dsbt.main.class=sbt.ScriptMain" && shift 2 ;;
 | 
			
		||||
 | 
			
		||||
       -sbt-create) sbt_create=true && shift ;;
 | 
			
		||||
          -sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
 | 
			
		||||
@ -354,8 +395,8 @@ process_args ()
 | 
			
		||||
  -sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;;
 | 
			
		||||
    -scala-version) require_arg version "$1" "$2" && setScalaVersion "$2" && shift 2 ;;
 | 
			
		||||
   -binary-version) require_arg version "$1" "$2" && setThisBuild scalaBinaryVersion "\"$2\"" && shift 2 ;;
 | 
			
		||||
       -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "Some(file(\"$2\"))" && shift 2 ;;
 | 
			
		||||
        -java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;;
 | 
			
		||||
       -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "_root_.scala.Some(file(\"$2\"))" && shift 2 ;;
 | 
			
		||||
        -java-home) require_arg path "$1" "$2" && setJavaHome "$2" && shift 2 ;;
 | 
			
		||||
         -sbt-opts) require_arg path "$1" "$2" && sbt_opts_file="$2" && shift 2 ;;
 | 
			
		||||
         -jvm-opts) require_arg path "$1" "$2" && jvm_opts_file="$2" && shift 2 ;;
 | 
			
		||||
 | 
			
		||||
@ -366,7 +407,9 @@ process_args ()
 | 
			
		||||
               -29) setScalaVersion "$latest_29" && shift ;;
 | 
			
		||||
              -210) setScalaVersion "$latest_210" && shift ;;
 | 
			
		||||
              -211) setScalaVersion "$latest_211" && shift ;;
 | 
			
		||||
 | 
			
		||||
              -212) setScalaVersion "$latest_212" && shift ;;
 | 
			
		||||
              -213) setScalaVersion "$latest_213" && shift ;;
 | 
			
		||||
               new) sbt_new=true && : ${sbt_explicit_version:=$sbt_release_version} && addResidual "$1" && shift ;;
 | 
			
		||||
                 *) addResidual "$1" && shift ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
@ -377,8 +420,10 @@ process_args "$@"
 | 
			
		||||
 | 
			
		||||
# skip #-styled comments and blank lines
 | 
			
		||||
readConfigFile() {
 | 
			
		||||
  while read line; do
 | 
			
		||||
    [[ $line =~ ^# ]] || [[ -z $line ]] || echo "$line"
 | 
			
		||||
  local end=false
 | 
			
		||||
  until $end; do
 | 
			
		||||
    read || end=true
 | 
			
		||||
    [[ $REPLY =~ ^# ]] || [[ -z $REPLY ]] || echo "$REPLY"
 | 
			
		||||
  done < "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -403,6 +448,8 @@ argumentCount=$#
 | 
			
		||||
# set sbt version
 | 
			
		||||
set_sbt_version
 | 
			
		||||
 | 
			
		||||
checkJava
 | 
			
		||||
 | 
			
		||||
# only exists in 0.12+
 | 
			
		||||
setTraceLevel() {
 | 
			
		||||
  case "$sbt_version" in
 | 
			
		||||
@ -415,19 +462,21 @@ setTraceLevel() {
 | 
			
		||||
[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[@]}\""
 | 
			
		||||
 | 
			
		||||
# Update build.properties on disk to set explicit version - sbt gives us no choice
 | 
			
		||||
[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version"
 | 
			
		||||
[[ -n "$sbt_explicit_version" && -z "$sbt_new" ]] && update_build_props_sbt "$sbt_explicit_version"
 | 
			
		||||
vlog "Detected sbt version $sbt_version"
 | 
			
		||||
 | 
			
		||||
[[ -n "$scala_version" ]] && vlog "Overriding scala version to $scala_version"
 | 
			
		||||
if [[ -n "$sbt_script" ]]; then
 | 
			
		||||
  residual_args=( $sbt_script ${residual_args[@]} )
 | 
			
		||||
else
 | 
			
		||||
  # no args - alert them there's stuff in here
 | 
			
		||||
  (( argumentCount > 0 )) || {
 | 
			
		||||
    vlog "Starting $script_name: invoke with -help for other options"
 | 
			
		||||
    residual_args=( shell )
 | 
			
		||||
  }
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# no args - alert them there's stuff in here
 | 
			
		||||
(( argumentCount > 0 )) || {
 | 
			
		||||
  vlog "Starting $script_name: invoke with -help for other options"
 | 
			
		||||
  residual_args=( shell )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# verify this is an sbt dir or -create was given
 | 
			
		||||
[[ -r ./build.sbt || -d ./project || -n "$sbt_create" ]] || {
 | 
			
		||||
# verify this is an sbt dir, -create was given or user attempts to run a scala script
 | 
			
		||||
[[ -r ./build.sbt || -d ./project || -n "$sbt_create" || -n "$sbt_script" || -n "$sbt_new" ]] || {
 | 
			
		||||
  cat <<EOM
 | 
			
		||||
$(pwd) doesn't appear to be an sbt project.
 | 
			
		||||
If you want to start sbt anyway, run:
 | 
			
		||||
@ -440,6 +489,10 @@ EOM
 | 
			
		||||
# pick up completion if present; todo
 | 
			
		||||
[[ -r .sbt_completion.sh ]] && source .sbt_completion.sh
 | 
			
		||||
 | 
			
		||||
# directory to store sbt launchers
 | 
			
		||||
[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir"
 | 
			
		||||
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers.XXXXXX)"
 | 
			
		||||
 | 
			
		||||
# no jar? download it.
 | 
			
		||||
[[ -r "$sbt_jar" ]] || acquire_sbt_jar || {
 | 
			
		||||
  # still no jar? uh-oh.
 | 
			
		||||
@ -501,8 +554,8 @@ mainFiltered () {
 | 
			
		||||
 | 
			
		||||
  echoLine () {
 | 
			
		||||
    local line="$1"
 | 
			
		||||
    local line1="$(echo "$line" | sed -r 's/\r\x1BM\x1B\[2K//g')"       # This strips the OverwriteLine code.
 | 
			
		||||
    local line2="$(echo "$line1" | sed -r 's/\x1B\[[0-9;]*[JKmsu]//g')" # This strips all codes - we test regexes against this.
 | 
			
		||||
    local line1="$(echo "$line" | sed 's/\r\x1BM\x1B\[2K//g')"       # This strips the OverwriteLine code.
 | 
			
		||||
    local line2="$(echo "$line1" | sed 's/\x1B\[[0-9;]*[JKmsu]//g')" # This strips all codes - we test regexes against this.
 | 
			
		||||
 | 
			
		||||
    if [[ $line2 =~ $excludeRegex ]]; then
 | 
			
		||||
      [[ -n $debugUs ]] && echo "[X] $line1"
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,13 @@
 | 
			
		||||
<configuration>
 | 
			
		||||
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 | 
			
		||||
    <!-- encoders are assigned the type
 | 
			
		||||
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
 | 
			
		||||
    <encoder>
 | 
			
		||||
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
 | 
			
		||||
    </encoder>
 | 
			
		||||
  </appender>
 | 
			
		||||
 | 
			
		||||
  <root level="warn">
 | 
			
		||||
    <appender-ref ref="STDOUT" />
 | 
			
		||||
  </root>
 | 
			
		||||
</configuration>
 | 
			
		||||
@ -10,7 +10,6 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import org.eclipse.jetty.server._
 | 
			
		||||
import org.eclipse.jetty.webapp.WebAppContext
 | 
			
		||||
import org.scalatra.servlet.ScalatraListener
 | 
			
		||||
 | 
			
		||||
@ -11,9 +11,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import com.wordnik.client.api._
 | 
			
		||||
import akka.actor.ActorSystem
 | 
			
		||||
import io.swagger.app.{ResourcesApp, SwaggerApp}
 | 
			
		||||
import io.swagger.server.api._
 | 
			
		||||
import io.swagger.app.{ ResourcesApp, SwaggerApp }
 | 
			
		||||
import javax.servlet.ServletContext
 | 
			
		||||
import org.scalatra.LifeCycle
 | 
			
		||||
 | 
			
		||||
@ -21,7 +20,6 @@ class ScalatraBootstrap extends LifeCycle {
 | 
			
		||||
  implicit val swagger = new SwaggerApp
 | 
			
		||||
 | 
			
		||||
  override def init(context: ServletContext) {
 | 
			
		||||
    implicit val system = ActorSystem("appActorSystem")
 | 
			
		||||
    try {
 | 
			
		||||
      context mount (new PetApi, "/v2/Pet/*")
 | 
			
		||||
      context mount (new StoreApi, "/v2/Store/*")
 | 
			
		||||
@ -32,4 +30,4 @@ class ScalatraBootstrap extends LifeCycle {
 | 
			
		||||
      case e: Throwable => e.printStackTrace()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -13,40 +13,26 @@
 | 
			
		||||
 | 
			
		||||
package io.swagger.app
 | 
			
		||||
 | 
			
		||||
import _root_.akka.actor.ActorSystem
 | 
			
		||||
 | 
			
		||||
import org.scalatra.swagger.{ ApiInfo, SwaggerWithAuth, Swagger }
 | 
			
		||||
import org.scalatra.swagger.{JacksonSwaggerBase, Swagger}
 | 
			
		||||
import org.scalatra.swagger.{ JacksonSwaggerBase, Swagger }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.json4s.{DefaultFormats, Formats}
 | 
			
		||||
import org.json4s.{ DefaultFormats, Formats }
 | 
			
		||||
 | 
			
		||||
class ResourcesApp(implicit protected val system: ActorSystem, val swagger: SwaggerApp)
 | 
			
		||||
class ResourcesApp(implicit protected val swagger: SwaggerApp)
 | 
			
		||||
  extends ScalatraServlet with JacksonSwaggerBase {
 | 
			
		||||
  before() {
 | 
			
		||||
    response.headers += ("Access-Control-Allow-Origin" -> "*")
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected def buildFullUrl(path: String) = if (path.startsWith("http")) path else {
 | 
			
		||||
   val port = request.getServerPort
 | 
			
		||||
   val h = request.getServerName
 | 
			
		||||
   val prot = if (port == 443) "https" else "http"
 | 
			
		||||
   val (proto, host) = if (port != 80 && port != 443) ("http", h+":"+port.toString) else (prot, h)
 | 
			
		||||
   "%s://%s%s%s".format(
 | 
			
		||||
     proto,
 | 
			
		||||
     host,
 | 
			
		||||
     request.getContextPath,
 | 
			
		||||
     path)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SwaggerApp extends Swagger(apiInfo = ApiSwagger.apiInfo, apiVersion = "1.0", swaggerVersion = "1.2")
 | 
			
		||||
class SwaggerApp extends Swagger(apiInfo = ApiSwagger.apiInfo, apiVersion = "1.0", swaggerVersion = Swagger.SpecVersion)
 | 
			
		||||
 | 
			
		||||
object ApiSwagger {
 | 
			
		||||
  val apiInfo = ApiInfo(
 | 
			
		||||
    """Swagger Petstore""",
 | 
			
		||||
    """This is a sample server Petstore server.  You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, you can use the api key `special-key` to test the authorization filters.""",
 | 
			
		||||
    """""",
 | 
			
		||||
    """http://swagger.io""",
 | 
			
		||||
    """apiteam@swagger.io""",
 | 
			
		||||
    """Apache 2.0""",
 | 
			
		||||
    """Apache-2.0""",
 | 
			
		||||
    """http://www.apache.org/licenses/LICENSE-2.0.html""")
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -11,31 +11,30 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.api
 | 
			
		||||
package io.swagger.server.api
 | 
			
		||||
 | 
			
		||||
import com.wordnik.client.model.ApiResponse
 | 
			
		||||
import io.swagger.server.model.ApiResponse
 | 
			
		||||
import java.io.File
 | 
			
		||||
import com.wordnik.client.model.Pet
 | 
			
		||||
import io.swagger.server.model.Pet
 | 
			
		||||
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
import org.scalatra.{ TypedParamSupport, ScalatraServlet }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.scalatra.swagger._
 | 
			
		||||
import org.json4s._
 | 
			
		||||
import org.json4s.JsonDSL._
 | 
			
		||||
import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
 | 
			
		||||
import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException}
 | 
			
		||||
import org.scalatra.servlet.{ FileUploadSupport, MultipartConfig, SizeConstraintExceededException }
 | 
			
		||||
 | 
			
		||||
import scala.collection.JavaConverters._
 | 
			
		||||
 | 
			
		||||
class PetApi (implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
    with FileUploadSupport
 | 
			
		||||
    with JacksonJsonSupport
 | 
			
		||||
    with SwaggerSupport {
 | 
			
		||||
class PetApi(implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
  with FileUploadSupport
 | 
			
		||||
  with JacksonJsonSupport
 | 
			
		||||
  with SwaggerSupport {
 | 
			
		||||
  protected implicit val jsonFormats: Formats = DefaultFormats
 | 
			
		||||
 | 
			
		||||
  protected val applicationDescription: String = "PetApi"
 | 
			
		||||
  override protected val applicationName: Option[String] = Some("/v2/Pet")
 | 
			
		||||
 | 
			
		||||
  before() {
 | 
			
		||||
    contentType = formats("json")
 | 
			
		||||
@ -11,29 +11,28 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.api
 | 
			
		||||
package io.swagger.server.api
 | 
			
		||||
 | 
			
		||||
import com.wordnik.client.model.Order
 | 
			
		||||
import io.swagger.server.model.Order
 | 
			
		||||
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
import org.scalatra.{ TypedParamSupport, ScalatraServlet }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.scalatra.swagger._
 | 
			
		||||
import org.json4s._
 | 
			
		||||
import org.json4s.JsonDSL._
 | 
			
		||||
import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
 | 
			
		||||
import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException}
 | 
			
		||||
import org.scalatra.servlet.{ FileUploadSupport, MultipartConfig, SizeConstraintExceededException }
 | 
			
		||||
 | 
			
		||||
import scala.collection.JavaConverters._
 | 
			
		||||
 | 
			
		||||
class StoreApi (implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
    with FileUploadSupport
 | 
			
		||||
    with JacksonJsonSupport
 | 
			
		||||
    with SwaggerSupport {
 | 
			
		||||
class StoreApi(implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
  with FileUploadSupport
 | 
			
		||||
  with JacksonJsonSupport
 | 
			
		||||
  with SwaggerSupport {
 | 
			
		||||
  protected implicit val jsonFormats: Formats = DefaultFormats
 | 
			
		||||
 | 
			
		||||
  protected val applicationDescription: String = "StoreApi"
 | 
			
		||||
  override protected val applicationName: Option[String] = Some("/v2/Store")
 | 
			
		||||
 | 
			
		||||
  before() {
 | 
			
		||||
    contentType = formats("json")
 | 
			
		||||
@ -11,29 +11,28 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.api
 | 
			
		||||
package io.swagger.server.api
 | 
			
		||||
 | 
			
		||||
import com.wordnik.client.model.User
 | 
			
		||||
import io.swagger.server.model.User
 | 
			
		||||
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
import org.scalatra.{ TypedParamSupport, ScalatraServlet }
 | 
			
		||||
import org.scalatra.ScalatraServlet
 | 
			
		||||
import org.scalatra.swagger._
 | 
			
		||||
import org.json4s._
 | 
			
		||||
import org.json4s.JsonDSL._
 | 
			
		||||
import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
 | 
			
		||||
import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException}
 | 
			
		||||
import org.scalatra.servlet.{ FileUploadSupport, MultipartConfig, SizeConstraintExceededException }
 | 
			
		||||
 | 
			
		||||
import scala.collection.JavaConverters._
 | 
			
		||||
 | 
			
		||||
class UserApi (implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
    with FileUploadSupport
 | 
			
		||||
    with JacksonJsonSupport
 | 
			
		||||
    with SwaggerSupport {
 | 
			
		||||
class UserApi(implicit val swagger: Swagger) extends ScalatraServlet
 | 
			
		||||
  with FileUploadSupport
 | 
			
		||||
  with JacksonJsonSupport
 | 
			
		||||
  with SwaggerSupport {
 | 
			
		||||
  protected implicit val jsonFormats: Formats = DefaultFormats
 | 
			
		||||
 | 
			
		||||
  protected val applicationDescription: String = "UserApi"
 | 
			
		||||
  override protected val applicationName: Option[String] = Some("/v2/User")
 | 
			
		||||
 | 
			
		||||
  before() {
 | 
			
		||||
    contentType = formats("json")
 | 
			
		||||
@ -10,12 +10,10 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case class ApiResponse (
 | 
			
		||||
case class ApiResponse(
 | 
			
		||||
  code: Option[Int],
 | 
			
		||||
  _type: Option[String],
 | 
			
		||||
  message: Option[String]
 | 
			
		||||
)
 | 
			
		||||
    _type: Option[String],
 | 
			
		||||
    message: Option[String]
 | 
			
		||||
  )
 | 
			
		||||
@ -10,11 +10,9 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case class Category (
 | 
			
		||||
case class Category(
 | 
			
		||||
  id: Option[Long],
 | 
			
		||||
  name: Option[String]
 | 
			
		||||
)
 | 
			
		||||
    name: Option[String]
 | 
			
		||||
  )
 | 
			
		||||
@ -10,17 +10,15 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
import java.util.Date
 | 
			
		||||
 | 
			
		||||
case class Order (
 | 
			
		||||
case class Order(
 | 
			
		||||
  id: Option[Long],
 | 
			
		||||
  petId: Option[Long],
 | 
			
		||||
  quantity: Option[Int],
 | 
			
		||||
  shipDate: Option[Date],
 | 
			
		||||
    petId: Option[Long],
 | 
			
		||||
    quantity: Option[Int],
 | 
			
		||||
    shipDate: Option[Date],
 | 
			
		||||
  /* Order Status */
 | 
			
		||||
  status: Option[String],
 | 
			
		||||
  complete: Option[Boolean]
 | 
			
		||||
)
 | 
			
		||||
    complete: Option[Boolean]
 | 
			
		||||
  )
 | 
			
		||||
@ -10,16 +10,14 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case class Pet (
 | 
			
		||||
case class Pet(
 | 
			
		||||
  id: Option[Long],
 | 
			
		||||
  category: Option[Category],
 | 
			
		||||
  name: String,
 | 
			
		||||
  photoUrls: List[String],
 | 
			
		||||
  tags: Option[List[Tag]],
 | 
			
		||||
    category: Option[Category],
 | 
			
		||||
    name: String,
 | 
			
		||||
    photoUrls: List[String],
 | 
			
		||||
    tags: Option[List[Tag]],
 | 
			
		||||
  /* pet status in the store */
 | 
			
		||||
  status: Option[String]
 | 
			
		||||
)
 | 
			
		||||
  )
 | 
			
		||||
@ -10,11 +10,9 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case class Tag (
 | 
			
		||||
case class Tag(
 | 
			
		||||
  id: Option[Long],
 | 
			
		||||
  name: Option[String]
 | 
			
		||||
)
 | 
			
		||||
    name: Option[String]
 | 
			
		||||
  )
 | 
			
		||||
@ -10,18 +10,16 @@
 | 
			
		||||
 * Do not edit the class manually.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package io.swagger.server.model
 | 
			
		||||
 | 
			
		||||
package com.wordnik.client.model
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case class User (
 | 
			
		||||
case class User(
 | 
			
		||||
  id: Option[Long],
 | 
			
		||||
  username: Option[String],
 | 
			
		||||
  firstName: Option[String],
 | 
			
		||||
  lastName: Option[String],
 | 
			
		||||
  email: Option[String],
 | 
			
		||||
  password: Option[String],
 | 
			
		||||
  phone: Option[String],
 | 
			
		||||
    username: Option[String],
 | 
			
		||||
    firstName: Option[String],
 | 
			
		||||
    lastName: Option[String],
 | 
			
		||||
    email: Option[String],
 | 
			
		||||
    password: Option[String],
 | 
			
		||||
    phone: Option[String],
 | 
			
		||||
  /* User Status */
 | 
			
		||||
  userStatus: Option[Int]
 | 
			
		||||
)
 | 
			
		||||
  )
 | 
			
		||||
@ -1,17 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
 | 
			
		||||
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 | 
			
		||||
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 | 
			
		||||
  version="3.0">
 | 
			
		||||
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
 | 
			
		||||
  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 | 
			
		||||
  version="3.1">
 | 
			
		||||
 | 
			
		||||
  <!-- 
 | 
			
		||||
    This listener loads a class in the default package called Scalatra.
 | 
			
		||||
    That class should should implement org.scalatra.LifeCycle.  Your app
 | 
			
		||||
    can be configured in Scala code there.
 | 
			
		||||
  -->
 | 
			
		||||
  <listener>
 | 
			
		||||
    <listener-class>org.scalatra.servlet.ScalatraListener</listener-class>
 | 
			
		||||
  </listener>
 | 
			
		||||
 | 
			
		||||
  <servlet-mapping>
 | 
			
		||||
    <servlet-name>default</servlet-name>
 | 
			
		||||
    <url-pattern>/*.html</url-pattern>
 | 
			
		||||
    <url-pattern>/css/*</url-pattern>
 | 
			
		||||
    <url-pattern>/js/*.js</url-pattern>
 | 
			
		||||
    <url-pattern>/images/*</url-pattern>
 | 
			
		||||
  </servlet-mapping>
 | 
			
		||||
</web-app>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user