Nano Hash - криптовалюты, майнинг, программирование

Развернуть несколько модулей Play проекта

Я пытаюсь развернуть проект Multi-Module Play с помощью SBT. В нашем проекте 5 модулей [commons, channel , ...]. Когда я использую sbt run в своей локальной системе, все работает нормально. Для развертывания на сервере я использую sbt dist для сборки проекта< /а>. Но когда я запускаю свое приложение, используя скрипт, сгенерированный sbt dist, возникают проблемы!

Вот один из примеров ошибок:

[error] error_handler - Unhandled Error
java.lang.IllegalArgumentException: No query defined for that name [automaticChannel.getTagByChannelId]
    at org.hibernate.internal.AbstractSharedSessionContract.buildQueryFromName(AbstractSharedSessionContract.java:770)
    at org.hibernate.internal.AbstractSharedSessionContract.createNamedQuery(AbstractSharedSessionContract.java:748)
    at org.hibernate.internal.AbstractSessionImpl.createNamedQuery(AbstractSessionImpl.java:23)
    at repositories.GenericRepository.namedQuery(GenericRepository.java:291)
    at repositories.GenericRepository.namedNativeQuery(GenericRepository.java:573)
    at repositories.AutomaticChannelRepository.getTagIds(AutomaticChannelRepository.java:63)
    at services.AutomaticChannelService.lambda$tagIds$6(AutomaticChannelService.java:159)
    at play.db.jpa.DefaultJPAApi.lambda$withTransaction$3(DefaultJPAApi.java:197)
    at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:138)
    at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:196)

Класс GenericRepository существует в модуле commons, а AutomaticChannelRepository — в модуле channel.

Часть файла buid.sbt:

lazy val connector = (project in file("modules/connector"))
  .enablePlugins(PlayScala)
  .settings(
    commonSettings,
    libraryDependencies += "org.mindrot" % "jbcrypt" % "0.4"
  )

lazy val common = (project in file("modules/common"))
  .enablePlugins(PlayJava)
  .dependsOn(connector)
  .settings(
    commonSettings,
    libraryDependencies ++= Seq(
      javaJdbc,
      filters,
      guice,
      javaWs,
      ehcache,
      javaJpa,
      evolutions,
      "org.hibernate" % "hibernate-entitymanager" % "5.2.11.Final",
      "org.hibernate" % "hibernate-ehcache" % "5.2.11.Final",
      "org.hibernate.javax.persistence" % "hibernate-jpa-2.1-api" % "1.0.0.Final",
      "com.google.code.gson" % "gson" % "2.1",
      "com.oracle" % "ojdbc8" % "12.2.0.1",
      "commons-io" % "commons-io" % "2.4",
      "commons-lang" % "commons-lang" % "2.6",
      "org.apache.commons" % "commons-collections4" % "4.1",
      "org.hibernate" % "hibernate-core" % "5.2.10.Final",
      "org.apache.tika" % "tika-core" % "1.13",
      "org.apache.tika" % "tika-parsers" % "1.13" exclude("com.google.code.gson", "gson"),
      "org.apache.tika" % "tika-xmp" % "1.13",
      "org.jsoup" % "jsoup" % "1.10.1",
      "com.thoughtworks.xstream" % "xstream" % "1.3"
    )
  )

lazy val search = (project in file("modules/search")).enablePlugins(PlayJava).dependsOn(common).settings(commonSettings)
lazy val channel = (project in file("modules/channel")).enablePlugins(PlayJava).dependsOn(common, search).settings(commonSettings)
lazy val recommend = (project in file("modules/recommend")).enablePlugins(PlayJava).dependsOn(common, search).settings(commonSettings)

lazy val root = (project in file("."))
  .enablePlugins(PlayJava)
  .dependsOn(channel, recommend)
  .aggregate(channel, recommend)
  .settings(commonSettings)

Интересно, в чем разница между sbt run и sbt dist?

И каков распространенный и рекомендуемый способ развертывания многомодульных проектов SBT?


Ответы:


1

Это проблема пути к классам. Вы должны поместить следующий код в свой build.sbt:

PlayKeys.externalizeResources := false

По умолчанию ресурсы из проекта не упакованы в файл jar, созданный sbt dist.

07.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..