java - 如何使用maven解决Heroku上的NoClassDefFoundError?

标签 java maven heroku noclassdeffounderror ormlite

我正在尝试在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 库。

enter image description here

到目前为止一切顺利。我在 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/

相关文章:

java - 启动时服务中出现 NoClassDefFoundError。 jce_policy-8.zip 是安全问题的罪魁祸首吗?

Java项目目录结构约定

javascript - 在 heroku 上保存文件更改

python - redis 队列中的并发

heroku - 从 Heroku 上的 Resque::TermException 或 SIGTERM 干净地恢复

java - 我使用的是哪个 JRE?

java - 查找给定类型的 XML 属性

java - 将 Angular + Spring Boot 部署到 Tomcat

java - 在 Java 中迭代格式化字符串的特定部分

java - 如何使用 Google App Engine Java 平台开发 Web ui