我有以下build.sbt文件:
lazy val shared = (project in file("shared")) .
settings (moduleName := "x-shared") .
...
lazy val service = (project in file ("service")) .
settings (moduleName := "x-api") .
dependsOn (shared % "compile->compile;test->test", job % "compile->compile;test->test") .
aggregate (shared, joob) .
...
lazy val job = (project in file("job") dependsOn (shared % "compile->compile;test->test")) .
settings (moduleName := "x-job") .
...
服务子模块需要共享模块和作业模块。共享项目基本上是所有模块使用的一组类。作业和服务都是不同的应用程序,但是服务上有一个端点,需要启动该作业应用程序。
问题在于,在运行时,尝试引用作业模块类时会出现以下错误:
java.lang.NoClassDefFoundError: com/earnest/ingestor/models/Pipeline$
但是我们可以毫无问题地引用共享模块。
项目的文件夹结构如下:
./root
./service
./shared
./job
我注意到的一件事是,与共享jar文件不同的是,为job模块生成的jar文件不会被复制到服务模块的lib文件夹中:
服务/目标/通用/阶段/ lib目录包含以下两个:
com.earnest.x-api-localdev.9288.jar
com.earnest.x-shared-localdev.9288.jar
但是作业jar被填充到作业模块中:
作业/目标/通用/阶段/ lib包含:
com.earnest.x-job-localdev.9288.jar
我对sbt构建很陌生,因此不确定通过sbt clean命令完成的构建过程中是否会丢失某些片段。我们正在使用sbt-native-package插件。我不确定共享哪些其他信息可能有用,因此我提取了build.sbt关键点,感谢您的提前帮助。
sbt插件:
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.11")
更新1
正在使用build.sbt文件中的LauncherJarPlugin从launcher.jar启动该应用程序。我注意到的一件事是launcher.jarcom.earnest.x-job-localdev.9288.jar
在ClassPath上不包含META_INF/MANIFEST.MF
我可以通过设置服务模块来解决我的问题 job % "compile->compile;test->test"
整个块看起来像:
lazy val service = (project in file ("service")) .
settings (moduleName := "x-api") .
dependsOn (shared % "compile->compile;test->test", job % "compile->compile;runtime->runtime;test->test") .
aggregate (shared, job) .
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句