【问题标题】:deploying java web app to heroku: NoClassDefFoundError caused by ClassNotFoundException将 Java Web 应用程序部署到 Heroku:由 ClassNotFoundException 引起的 NoClassDefFoundError
【发布时间】:2020-04-23 14:01:41
【问题描述】:

我遵循了这个指示:

https://devcenter.heroku.com/articles/deploying-java

将 java web 应用程序部署到 heroku。

我的 Procfile 的内容如下:

web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.michael.optimizer.Optimizer

(优化器是我的主类的名称。)

执行命令

mvn clean install 

成功构建项目。

然后执行命令

heroku local web

导致以下错误消息:

Exception in thread "main" 
5:33:48 PM web.1 |  java.lang.NoClassDefFoundError: javax/json/Json
5:33:48 PM web.1 |  at com.michael.optimizer.api.JsonRequest.doJsonRequest(JsonRequest.java:29)
5:33:48 PM web.1 |      at         com.michael.optimizer.api.StationApi.doJsonRequest(StationApi.java:150)
5:33:48 PM web.1 |      at     com.michael.optimizer.api.StationApi.areaSearch(StationApi.java:73)
5:33:48 PM web.1 |      at com.michael.optimizer.Optimizer.main(Optimizer.java:23)
5:33:48 PM web.1 |  Caused by: java.lang.ClassNotFoundException: javax.json.Json
5:33:48 PM web.1 |      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
5:33:48 PM web.1 |      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
5:33:48 PM web.1 |      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
5:33:48 PM web.1 |      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
5:33:48 PM web.1 |      ... 4 more

我不明白的是:当我在本地运行应用程序时,一切正常。 (而且它工作正常也就不足为奇了,因为在文件夹 ~/.m2/repository/javax/javaee-web-api/7.0/javaee-web-api-7.0.jar 里面应该有 json 包。)

仅当我尝试部署到 heroku 时,显然找不到类 javax.json.Json。

怎么了???

【问题讨论】:

  • 您能否验证在本地运行mvn clean install 后,javaee-web-api-7.0.jar 是否存在于您的target/dependency 目录中?
  • @Malax:非常感谢您的回答,对于迟到的回复感到抱歉。我签入了文件夹目标...运行“mvn clean install”后javaee-web-api-7.0.jar不在该文件夹中...我该如何更改?
  • 您能否显示您定义 JEE API 的 <dependency> 部分?

标签: java heroku classnotfoundexception noclassdeffounderror javax.json


【解决方案1】:

您可能想使用copy-dependencies

mvn install dependency:copy-dependencies 

这会复制 target/dependencies 中的所有依赖项。

如果要排除测试范围依赖,

mvn install dependency:copy-dependencies -DexcludeScope=test

【讨论】:

  • 非常感谢您的回答...我认为这是解决方案。不幸的是,我现在不能确定,因为现在 - 即使在本地运行应用程序(几周前运行没有问题) - 我收到另一条错误消息。对于其他问题,我在这里提出了一个单独的问题:stackoverflow.com/questions/61394742/…
  • 我为其他问题开始了 500 的赏金 (stackoverflow.com/questions/61394742/…)
  • @steady_progress 添加了答案。请检查。我希望它有所帮助。
  • 非常感谢您对另一个问题的回答...其他人在您之前给出了相同的答案,所以我不得不给他赏金...但我会给您额外的 250 分对于上面提供的答案...我仍然无法确定您上面的答案是否解决了问题,因为现在我突然收到 404 错误...但我现在批准了答案,所以您肯定会获得 250 分...一旦我知道答案解决了我的问题,您将额外获得 250 分
  • 我在这里创建了一个关于 404 错误的新问题:stackoverflow.com/questions/61445520/…
猜你喜欢
  • 1970-01-01
  • 2019-07-24
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多