使用sbt构建的应用程序在运行时发生NoClassDefFoundError

用户名

我有以下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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

blazor wasm应用程序在运行时的程序集构建版本

在运行时检测 MSIX 打包的应用程序

在运行时更改Polymer应用程序的主题

在运行时更改应用程序主题

在运行时更改应用程序MainForm

在运行时更改应用程序语言

在运行时设计 Angular 应用程序的样式

Web应用程序:在运行时删除文件

使用应用程序部署JSON文件并在运行时访问它

使用MSVC编译的多线程应用程序在运行时失败

如何在运行时使用应用程序主机和端口

在运行时使用控制台输入调试打字稿应用程序

如何在运行时中检测到应用程序使用了Swift

如何使用 ContextCompat.checkSelfPermission() 在运行时检查 android 应用程序权限?

如何在运行时使用Visual Studio调试Pygame应用程序

如何从Gradle构建中获取版本属性以包含在运行时Swing应用程序中

如何在运行时知道Kony应用程序是在调试还是发布模式下构建的

指定使用“ dist”构建的运行时播放应用程序配置

使用iOS 10 SDK构建的应用程序在iOS 8上运行时崩溃

在基于Spring Boot的应用程序中使用REST API输入在运行时设置架构名称

如何使用Swift在运行时使我的应用程序表现得就像我在更改Application is agent(UIElement)?

如何在运行时应用程序中使用OpenCV Python在图像上写文本

是否可以在运行时使用angularAMD延迟加载角度模块并将其插入到应用程序中?

在运行时替换MVC应用程序部分和Razor文件提供程序

运行时应用程序

运行Spring Session + Spring Boot应用程序时发生运行时错误

NLog可以从C#应用程序接收变量,其值在运行时发生变化吗?例如 批次编号

如何使用 wpf 创建一个应用程序,在运行时创建一个新应用程序?

更新到Android 3.6工作室后,在运行时应用程序崩溃