Ранее я писал об использовании Scala с Spring Boot и о том, как работает комбинация. Однако с предыдущим подходом была одна проблема — единственный способ запустить более раннюю конфигурацию состоял в том, чтобы собрать проект в файл JAR и запустить файл JAR.
|
1
2
|
./gradlew buildjava -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. |