2017-07-30 6 views
0

私はマルチモジュールSBTプロジェクトを開発します。一般的にはakka apiです。私はそれをローカルで実行し、ドッカーでパッケージ化するとうまく動作します。SBTマルチモジュールプロジェクト:メインモジュールで静的ファイル(リソース)を利用できるようにする方法は?

最近、私は電子メールテンプレート生成用の新しいモジュールを追加しました。私はこの目的でscalate mustacheを使うことに決めました。テストの理由から私は単純なテンプレートhello.mustacheemail/src/main/resources/templatesに作成しました。

次に、email/src/main/scalaにあるクラスのテンプレートを使用するコードを実行します。すべてがコンパイルされました。(scalate templates & scala code)

私はアプリモジュールに含まれているセキュリティモジュールにメールモジュールに依存関係を追加した後:メールのコードを実行しようとしているときに、私は、次のエラーが表示

import sbt.Keys._ 
import NativePackagerHelper._ 

lazy val core = project.in(file("core")) 
    .settings(name := "core") 
    .settings(Common.settings) 
    .settings(libraryDependencies ++= Dependencies.commonDependencies) 
    .enablePlugins(JavaAppPackaging) 

lazy val email = project.in(file("email")) 
    .settings(name := "email") 
    .settings(Common.settings) 
    .settings(libraryDependencies ++= Dependencies.emailDependencies) 
    .enablePlugins(JavaAppPackaging) 

lazy val contacts = project.in(file("contacts")) 
    .settings(name := "contacts") 
    .settings(Common.settings) 
    .dependsOn(core % "test->test;compile->compile") 
    .enablePlugins(JavaAppPackaging) 

lazy val security = project.in(file("security")) 
    .settings(name := "security") 
    .settings(Common.settings) 
    .dependsOn(email, core % "test->test;compile->compile") 
    .enablePlugins(JavaAppPackaging) 

lazy val app = project.in(file(".")) 
    .enablePlugins(JavaAppPackaging, AshScriptPlugin, DockerPlugin) 
    .settings(name := "app") 
    .settings(Common.settings) 
    .dependsOn(core, security, contacts) 
    .settings(
    mainClass in Compile := Some("com.app.Main"), 
    packageName in Docker := "app-backend", 
    version in Docker := "latest", 
    dockerBaseImage := "openjdk:8-jre-alpine", 
    dockerExposedPorts := Seq(5000) 
) 

Exception in thread "main" org.fusesource.scalate.TemplateException: scala.tools.nsc.symtab.classfile.ClassfileParser$unpickler$.unpickle([BILscala/reflect/internal/Symbols$Symbol;Lscala/reflect/internal/Symbols$Symbol;Ljava/lang/String;)V 
    at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:886) 
    at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:745) 
... 

はどのようでメールモジュールのコードを動作させるためにノートモジュール?

追加情報: モジュールのMainクラスを実行して、IDEからコードを直接実行しようとしています。 Scalaバージョン2.12.2; Scalateバージョン1.8.0; sbtバージョン0.13.8;

答えて

1

いくつかのスケーラコンパイラのバージョン間でビンの互換性の問題が発生しているのではないかと心配です。このような問題を避けるには、このようなスカラーバージョンを明示的にオーバーライドすることが好ましい。

dependencyOverrides := Set(
    "org.scala-lang"   % "scala-library"    % scalaVersion.value, 
    "org.scala-lang"   % "scala-reflect"    % scalaVersion.value, 
    "org.scala-lang"   % "scala-compiler"   % scalaVersion.value 
), 
1

特定のケースでは、log4jバージョンのscalateと他の1つのscalaの競合に問題がありました。だから私のために働く解決策は、

"org.scalatra.scalate" %% "scalate-core" % "1.8.0" excludeAll(ExclusionRule(organization = "org.slf4j")) 
です。
関連する問題