我正在尝试在heroku上部署我的应用程序,但在调用index.html页面时收到NoClassDefFoundError。错误日志如下所示:
2018-11-04T19:13:02.080531+00:00 heroku[web.1]: Starting process with
command `java $JAVA_OPTS -cp target/classes:target/dependency/*
com.treslines.server.Server`
2018-11-04T19:13:05.913978+00:00 app[web.1]: Setting
JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will
override them.
2018-11-04T19:13:05.926232+00:00 app[web.1]: Picked up
JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2
-Dfile.encoding=UTF-8
2018-11-04T19:13:06.250733+00:00 app[web.1]: Error: A JNI error has
occurred, please check your installation and try again
2018-11-04T19:13:06.250788+00:00 app[web.1]: Exception in thread
"main" java.lang.NoClassDefFoundError: com/j256/ormlite/support
/ConnectionSource
2018-11-04T19:13:06.250796+00:00 app[web.1]: at
java.lang.Class.getDeclaredMethods0(Native Method)
2018-11-04T19:13:06.250799+00:00 app[web.1]: at
java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
2018-11-04T19:13:06.250801+00:00 app[web.1]: at
java.lang.Class.privateGetMethodRecursive(Class.java:3048)
2018-11-04T19:13:06.250808+00:00 app[web.1]: at
java.lang.Class.getMethod0(Class.java:3018)
2018-11-04T19:13:06.250810+00:00 app[web.1]: at
java.lang.Class.getMethod(Class.java:1784)
2018-11-04T19:13:06.250812+00:00 app[web.1]: at ... 7 more
所以我理解了这个错误,我在本地的 target/dependency 文件夹中查找了 ormlite-core-5.1 中缺少的类的所有依赖项,并且ormlite-jdbc-5.1 库。
到目前为止一切顺利。我在 Heroku 上的 proc 文件如下所示:
web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.treslines.server.Server
在我的 Maven pom.xml 中,我有这些配置:
...
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-core</artifactId>
<version>5.1</version>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-jdbc</artifactId>
<version>5.1</version>
</dependency>
...
<configuration>
<descriptorRefs>
<!-- This tells Maven to include all dependencies -->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.treslines.server.Server</mainClass>
</manifest>
</archive>
</configuration>
...
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>0.4.4</version>
<configuration>
<jdkVersion>1.8</jdkVersion>
<!-- Use your own application name >>> heroku enforces lowcase names -->
<appName>stocknews</appName>
<processTypes>
<!-- Tell Heroku how to launch your application -->
<web>java $JAVA_OPTS -cp target/classes:target/dependency/* com.treslines.server.Server</web>
</processTypes>
</configuration>
</plugin>
代码在本地主机上运行就像一个魅力。我成功地将代码推送到heroku,一切运行良好,maven构建成功等等。但是,当我在命令 cli 上调用 heroku open 或在浏览器上键入 url 时,会发生 NoClassDefFoundError 。
有人知道如何解决这个问题吗?有没有办法访问heroku上部署的代码以查看有效部署的内容?
最佳答案
首先更新 heroku-maven-plugin。您使用的是 0.4.4,但最新的是 2.0.6:
<version>2.0.6</version>
关于java - 如何使用maven解决Heroku上的NoClassDefFoundError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154295/