我一直在尝试在heroku上部署一个java gradle应用程序,我可以用heroku local
在本地部署它,但是当使用heroku open
时,它说应用程序错误。
日志上说
2022-10-10T03:22:06.151325+00:00 heroku[web.1]: Starting process with command `java -jar app/build/libs/app.jar`
2022-10-10T03:22:07.027867+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2022-10-10T03:22:07.031763+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2022-10-10T03:22:07.339805+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: com/github/benmanes/caffeine/cache/Caffeine
2022-10-10T03:22:07.339946+00:00 app[web.1]: at org.jdbi.v3.core.statement.CachingSqlParser.<init>(CachingSqlParser.java:25)
2022-10-10T03:22:07.339987+00:00 app[web.1]: at org.jdbi.v3.core.statement.ColonPrefixSqlParser.<init>(ColonPrefixSqlParser.java:41)
2022-10-10T03:22:07.340028+00:00 app[web.1]: at org.jdbi.v3.core.statement.SqlStatements.<init>(SqlStatements.java:53)
2022-10-10T03:22:07.340075+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.lambda$configFactory$3(ConfigRegistry.java:100)
2022-10-10T03:22:07.340116+00:00 app[web.1]: at org.jdbi.v3.core.internal.exceptions.Unchecked.lambda$function$4(Unchecked.java:76)
2022-10-10T03:22:07.340156+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.get(ConfigRegistry.java:78)
2022-10-10T03:22:07.340210+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.<init>(ConfigRegistry.java:47)
2022-10-10T03:22:07.340213+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.<init>(Jdbi.java:58)
2022-10-10T03:22:07.340233+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.create(Jdbi.java:104)
2022-10-10T03:22:07.340258+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.create(Jdbi.java:88)
2022-10-10T03:22:07.340289+00:00 app[web.1]: at dao.JDBIDaoFactory.initialisePool(JDBIDaoFactory.java:39)
2022-10-10T03:22:07.340315+00:00 app[web.1]: at dao.JDBIDaoFactory.getPersonDAO(JDBIDaoFactory.java:45)
2022-10-10T03:22:07.340359+00:00 app[web.1]: at group5MentorMatcher.Main.<init>(Main.java:32)
2022-10-10T03:22:07.340391+00:00 app[web.1]: at group5MentorMatcher.Main.main(Main.java:68)
2022-10-10T03:22:07.340479+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: com.github.benmanes.caffeine.cache.Caffeine
2022-10-10T03:22:07.340510+00:00 app[web.1]: at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
2022-10-10T03:22:07.340543+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
2022-10-10T03:22:07.340573+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
2022-10-10T03:22:07.341430+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
2022-10-10T03:22:07.341432+00:00 app[web.1]: ... 14 more
2022-10-10T03:22:07.473893+00:00 heroku[web.1]: Process exited with status 1
2022-10-10T03:22:07.584112+00:00 heroku[web.1]: State changed from starting to crashed
2022-10-10T03:22:07.587213+00:00 heroku[web.1]: State changed from crashed to starting
2022-10-10T03:22:10.727576+00:00 heroku[web.1]: Starting process with command `java -jar app/build/libs/app.jar`
2022-10-10T03:22:11.754717+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2022-10-10T03:22:11.759021+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2022-10-10T03:22:12.078014+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: com/github/benmanes/caffeine/cache/Caffeine
2022-10-10T03:22:12.078115+00:00 app[web.1]: at org.jdbi.v3.core.statement.CachingSqlParser.<init>(CachingSqlParser.java:25)
2022-10-10T03:22:12.078141+00:00 app[web.1]: at org.jdbi.v3.core.statement.ColonPrefixSqlParser.<init>(ColonPrefixSqlParser.java:41)
2022-10-10T03:22:12.078165+00:00 app[web.1]: at org.jdbi.v3.core.statement.SqlStatements.<init>(SqlStatements.java:53)
2022-10-10T03:22:12.078193+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.lambda$configFactory$3(ConfigRegistry.java:100)
2022-10-10T03:22:12.078219+00:00 app[web.1]: at org.jdbi.v3.core.internal.exceptions.Unchecked.lambda$function$4(Unchecked.java:76)
2022-10-10T03:22:12.078256+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.get(ConfigRegistry.java:78)
2022-10-10T03:22:12.078281+00:00 app[web.1]: at org.jdbi.v3.core.config.ConfigRegistry.<init>(ConfigRegistry.java:47)
2022-10-10T03:22:12.078305+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.<init>(Jdbi.java:58)
2022-10-10T03:22:12.078327+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.create(Jdbi.java:104)
2022-10-10T03:22:12.078377+00:00 app[web.1]: at org.jdbi.v3.core.Jdbi.create(Jdbi.java:88)
2022-10-10T03:22:12.078377+00:00 app[web.1]: at dao.JDBIDaoFactory.initialisePool(JDBIDaoFactory.java:39)
2022-10-10T03:22:12.078395+00:00 app[web.1]: at dao.JDBIDaoFactory.getPersonDAO(JDBIDaoFactory.java:45)
2022-10-10T03:22:12.078453+00:00 app[web.1]: at group5MentorMatcher.Main.<init>(Main.java:32)
2022-10-10T03:22:12.078467+00:00 app[web.1]: at group5MentorMatcher.Main.main(Main.java:68)
2022-10-10T03:22:12.078587+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: com.github.benmanes.caffeine.cache.Caffeine
2022-10-10T03:22:12.078628+00:00 app[web.1]: at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
2022-10-10T03:22:12.078667+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
2022-10-10T03:22:12.078694+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
2022-10-10T03:22:12.078722+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
2022-10-10T03:22:12.078775+00:00 app[web.1]: ... 14 more
2022-10-10T03:22:12.237958+00:00 heroku[web.1]: Process exited with status 1
2022-10-10T03:22:12.297708+00:00 heroku[web.1]: State changed from starting to crashed
2022-10-10T03:22:12.719118+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=intense-bastion-46272.herokuapp.com request_id=3042533f-c6d7-48a2-b5d8-d80384ee3514 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:22:13.179675+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=intense-bastion-46272.herokuapp.com request_id=f78a3a9f-f2ea-442d-97b0-7bc441f360fc fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:22:14.000000+00:00 app[api]: Build succeeded
2022-10-10T03:22:58.344804+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=intense-bastion-46272.herokuapp.com request_id=e40e294d-f979-43cb-9954-262d0add0f65 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:22:59.145356+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=intense-bastion-46272.herokuapp.com request_id=1fd76e2f-ba11-4564-b5c6-0c49927b0bd9 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:22:59.918467+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=intense-bastion-46272.herokuapp.com request_id=1152492a-56a6-4336-a05b-313bf27db344 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:23:00.694990+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=intense-bastion-46272.herokuapp.com request_id=ff8267ca-e4bf-4eba-a663-eed2b01631de fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:23:10.435273+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=intense-bastion-46272.herokuapp.com request_id=b3027c0c-41f4-4b21-afcb-887de8f10530 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:23:11.257817+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=intense-bastion-46272.herokuapp.com request_id=39dfd85c-4ba2-4a77-a87a-b433276f72e0 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:31:19.036836+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=intense-bastion-46272.herokuapp.com request_id=74c91344-577b-4f84-9cba-718f0bd3ad21 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
2022-10-10T03:31:19.461871+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=intense-bastion-46272.herokuapp.com request_id=459792e2-1462-4ef7-a1d5-a5699d345fb6 fwd="122.62.121.70" dyno= connect= service= status=503 bytes= protocol=https
错误似乎是NoClassDefFound
wtth咖啡因,但在本地查看我的文件咖啡因罐在那里。
我的身材。Gradle看起来像
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
jar {
manifest {
attributes(
'Main-Class': 'group5MentorMatcher.Main',
'Class-Path': 'jooby-2.13.0.jar javax.inject-1.jar config-1.4.1.jar \n\
jdbi3-core-3.21.0.jar HikariCP-4.0.3.jar slf4j-api-1.7.36.jar antlr4-runtime-4.9.2.jar \n\
caffeine-3.0.3.jar checker-qual-3.8.0.jar error_prone_annotations-2.5.1.jar \n\
failureaccess-1.0.1.jar geantyref-1.3.11.jar gson-2.8.6.jar guava-30.1.1-jre.jar\n\
j2objc-annotations-1.3.jar jdbi3-sqlobject-3.21.0.jar jooby-gson-2.13.0.jar\n\
jooby-netty-2.13.0.jar jooby-swagger-ui-2.13.0.jar jsr305-3.0.2.jar\n\
listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar logback-classic-1.2.10.jar\n\
logback-core-1.2.10.jar netty-buffer-4.1.73.Final.jar netty-codec-4.1.73.Final.jar\n\
netty-codec-http-4.1.73.Final.jar netty-common-4.1.73.Final.jar netty-handler-4.1.73.Final.jar\n\
netty-resolver-4.1.73.Final.jar netty-tcnative-classes-2.0.46.Final.jar netty-transport-4.1.73.Final.jar\n\
postgresql-42.4.0.jar'
);
}
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
//Dependencies for testing
def junitVer = "5.8.2";
testImplementation group: "org.junit.jupiter", name: "junit-jupiter-api", version: junitVer;
testRuntimeOnly group: "org.junit.jupiter", name: "junit-jupiter-engine", version: junitVer;
testImplementation group: "org.hamcrest", name: "hamcrest", version: "2.2";
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// This dependency is used by the application.
implementation 'com.google.guava:guava:30.1.1-jre'
// Use postgres to connect to the database
implementation 'org.postgresql:postgresql:42.4.0'
// guava
implementation group: 'com.google.guava', name: 'guava', version: '30.1.1-jre'
// jooby
def joobyVer = '2.13.0'
implementation group: 'io.jooby', name: 'jooby-netty', version: joobyVer
implementation group: 'io.jooby', name: 'jooby-gson', version: joobyVer
implementation group: 'io.jooby', name: 'jooby-swagger-ui', version: joobyVer
//logging
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36'
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.10'
implementation group: 'com.zaxxer', name: 'HikariCP', version: '4.0.3'
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.5'
def jdbiVer = '3.21.0'
implementation group: 'org.jdbi', name: 'jdbi3-core', version: jdbiVer
implementation group: 'org.jdbi', name: 'jdbi3-sqlobject', version: jdbiVer
}
application {
// Define the main class for the application.
mainClass = 'group5MentorMatcher.Main'
}
//test {
// useJUnitPlatform();
// onlyIf { project.gradle.startParameter.taskNames.contains("test") }
//}
//tasks.named('test') {
// Use JUnit Platform for unit tests.
// useJUnitPlatform()
//}
task stage(dependsOn: ['build', 'clean'])
build.mustRunAfter clean
task copyToLib(type: Copy) {
from configurations.compileClasspath
into 'build/libs'
}
stage.dependsOn(copyToLib)
gradle.taskGraph.whenReady {
taskGraph ->
if (taskGraph.hasTask(stage)) {
test.enabled = false
}
}
sourceSets {
'static' {
resources {
srcDirs = ['static']
}
java{
srcDirs = []
}
}
}
我的proc文件看起来像web: java -jar app/build/libs/app.jar
我已经在这个问题上这么长时间了,我不能弄清楚这个问题,任何帮助都将不胜感激
1条答案
按热度按时间bvn4nwqk1#
当你的代码依赖于一个类文件,并且它在编译时存在(它在本地工作),但在运行时却找不到(在heroku打开时)时,就会发生这种情况。你可以在你的构建时和运行时
classpaths
中寻找差异。你可以使用简单的程序get classpath。
您可以尝试构建一个fat jar,并使用fat jar启动Java程序,其中包含所有依赖项。
构建版本
Uber/Fat Jar
的进一步参考:https://stackoverflow.com/a/4894308/8017666