Статьи

Spring Boot и Scala со sbt в качестве инструмента для сборки

Ранее я писал об использовании Scala с Spring Boot и о том, как работает комбинация. Однако с предыдущим подходом была одна проблема — единственный способ запустить более раннюю конфигурацию состоял в том, чтобы собрать проект в файл JAR и запустить файл JAR.

1
2
./gradlew build
java -jar build/libs/spring-boot-scala-web-0.1.0.jar

Spring boot поставляется с плагином на основе gradle, который должен был позволять запускать проект с помощью команды «gradle bootRun», что, к сожалению, приводит к ошибке для проектов на основе scala.

Хороший обходной путь — использовать sbt для сборки и запуска проектов на основе Spring-boot. Суть в том, что с помощью gradle и maven версии зависимостей могли бы управляться через родительский pom, теперь они должны быть явно указаны. Вот как выглядит пример файла сборки sbt с прописанными зависимостями:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
name := "spring-boot-scala-web"
 
version := "1.0"
 
scalaVersion := "2.10.4"
 
sbtVersion := "0.13.1"
 
seq(webSettings : _*)
 
libraryDependencies ++= Seq(
  "org.springframework.boot" % "spring-boot-starter-web" % "1.0.2.RELEASE",
  "org.springframework.boot" % "spring-boot-starter-data-jpa" % "1.0.2.RELEASE",
  "org.webjars" % "bootstrap" % "3.1.1",
  "org.webjars" % "jquery" % "2.1.0-2",
  "org.thymeleaf" % "thymeleaf-spring4" % "2.1.2.RELEASE",
  "org.hibernate" % "hibernate-validator" % "5.0.2.Final",
  "nz.net.ultraq.thymeleaf" % "thymeleaf-layout-dialect" % "1.2.1",
  "org.hsqldb" % "hsqldb" % "2.3.1",
  "org.springframework.boot" % "spring-boot-starter-tomcat" % "1.0.2.RELEASE" % "provided",
  "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided"
)
 
 
libraryDependencies ++= Seq(
  "org.apache.tomcat.embed" % "tomcat-embed-core"         % "7.0.53" % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-logging-juli" % "7.0.53" % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-jasper"       % "7.0.53" % "container"
)

Здесь я также использую xsbt-web-plugin, который является плагином для создания веб-приложений scala.

xsbt-web-plugin также поставляется с командами для запуска контейнеров на основе tomcat или jetty и запуска приложений в этих контейнерах, однако у меня возникли трудности с тем, чтобы заставить их работать.

Работала команда runMain для запуска основной программы Spring-boot через sbt:

1
runMain mvctest.SampleWebApplication

и xsbt-web-plugin позволяет упаковать проект в файл war с помощью команды «package», эта война развертывается и запускается без каких-либо проблем в автономном контейнере Tomcat.

Вот проект GitHub с этими изменениями: https://github.com/bijukunjummen/spring-boot-scala-web.git

Ссылка: Spring Boot и Scala с sbt в качестве инструмента для сборки от нашего партнера по JCG Биджу Кунджуммен в блоге all and sundry.