正在将 java 网络应用程序部署到 heroku:由 ClassNotFoundException 引起的 NoClassDefFoundError
deploying java web app to heroku: NoClassDefFoundError caused by ClassNotFoundException
我遵循了这条指示:
https://devcenter.heroku.com/articles/deploying-java
将 java 网络应用程序部署到 heroku。
我的 Procfile 的内容如下:
web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.michael.optimizer.Optimizer
(Optimizer是我的主class的名字。)
正在执行命令
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 时,class javax.json.Json 显然找不到。
怎么了???
您可能想使用 copy-dependencies,
mvn install dependency:copy-dependencies
复制target/dependencies.
中的所有依赖
如果你想排除测试范围依赖,
mvn install dependency:copy-dependencies -DexcludeScope=test
我遵循了这条指示:
https://devcenter.heroku.com/articles/deploying-java
将 java 网络应用程序部署到 heroku。
我的 Procfile 的内容如下:
web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.michael.optimizer.Optimizer
(Optimizer是我的主class的名字。)
正在执行命令
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 时,class javax.json.Json 显然找不到。
怎么了???
您可能想使用 copy-dependencies,
mvn install dependency:copy-dependencies
复制target/dependencies.
中的所有依赖如果你想排除测试范围依赖,
mvn install dependency:copy-dependencies -DexcludeScope=test