我一直在嘗試在 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
錯誤似乎是NoClassDefFoundwtth caffeine ,但是在本地查看我的檔案時,Caffeine jar 就在那里。
我的 build.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 = []
}
}
}
我的 procfile 看起來像
web: java -jar app/build/libs/app.jar
我一直在這個問題上,我無法弄清楚這個問題,任何幫助將不勝感激
uj5u.com熱心網友回復:
當您的代碼依賴于一個類檔案并且它在編譯時存在(它在本地作業)但在運行時找不到(在打開 heroku 時)時,就會發生這種情況。您可以查找構建時間和運行時的差異classpaths。
您可以使用簡單的程式獲取類路徑。
您可以嘗試構建一個fat jar并使用包含所有依賴項的 fat jar 啟動您的 java 程式。
進一步參考構建Uber/Fat Jar:
https ://stackoverflow.com/a/4894308/8017666
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512616.html
上一篇:ApplicationInsights-沒有從服務器顯示的資料
下一篇:Heroku上的錯誤:`SyntaxError:Cannotuseimportstatementoutsideamodule`
