slackapi / java-slack-sdk

Slack Developer Kit (including Bolt for Java) for any JVM language
https://slack.dev/java-slack-sdk/
MIT License
570 stars 209 forks source link

Why doesn't try-catch help catch the exception when the app is run from within a JAR? #1250

Closed akshayamaldhure closed 8 months ago

akshayamaldhure commented 8 months ago

I compiled my bot listener service as a fat JAR using this Gradle plugin https://github.com/johnrengelman/shadow. Below is the fat JAR task config in my build.gradle file.

task shadowJarBotService (type: ShadowJar) {
    zip64 true
    archiveFileName = 'my-bot-service.jar'
    manifest.attributes["Main-Class"] = "myBot.Service"
    project.configurations.shadow.setTransitive(true);
    configurations = [project.configurations.shadow]
    from sourceSets.test.output
    from sourceSets.test.resources
    from sourceSets.main.output
    from sourceSets.main.resources

}

The code to return a relevant message to the return context.client().chatPostMessage(...) call is a simple try-catch block that works well if I do not run my service through a JAR, but through a Gradle run task configuration.

Reproducible in:

implementation("com.slack.api:bolt-socket-mode:1.36.1")
implementation("javax.websocket:javax.websocket-api:1.1")
implementation("org.glassfish.tyrus.bundles:tyrus-standalone-client:1.19")
implementation("org.slf4j:slf4j-simple:1.7.36")

The Slack SDK version

|    +--- com.slack.api:slack-api-client:1.1.0 -> 1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1
+--- com.slack.api:bolt-socket-mode:1.36.1
|    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    +--- com.slack.api:slack-app-backend:1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    |    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    \--- com.slack.api:bolt:1.36.1
|         +--- com.slack.api:slack-api-model:1.36.1 (*)
|         +--- com.slack.api:slack-api-client:1.36.1 (*)
|         +--- com.slack.api:slack-app-backend:1.36.1 (*)
+--- com.slack.api:bolt-socket-mode:1.36.1 (n)
|    +--- com.slack.api:slack-api-client:1.1.0 -> 1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1
+--- com.slack.api:bolt-socket-mode:1.36.1
|    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    +--- com.slack.api:slack-app-backend:1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    |    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    \--- com.slack.api:bolt:1.36.1
|         +--- com.slack.api:slack-api-model:1.36.1 (*)
|         +--- com.slack.api:slack-api-client:1.36.1 (*)
|         +--- com.slack.api:slack-app-backend:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.1.0 -> 1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1
+--- com.slack.api:bolt-socket-mode:1.36.1
|    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    +--- com.slack.api:slack-app-backend:1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    |    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    \--- com.slack.api:bolt:1.36.1
|         +--- com.slack.api:slack-api-model:1.36.1 (*)
|         +--- com.slack.api:slack-api-client:1.36.1 (*)
|         +--- com.slack.api:slack-app-backend:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.1.0 -> 1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1
+--- com.slack.api:bolt-socket-mode:1.36.1
|    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    +--- com.slack.api:slack-app-backend:1.36.1
|    |    +--- com.slack.api:slack-api-model:1.36.1 (*)
|    |    +--- com.slack.api:slack-api-client:1.36.1 (*)
|    \--- com.slack.api:bolt:1.36.1
|         +--- com.slack.api:slack-api-model:1.36.1 (*)
|         +--- com.slack.api:slack-api-client:1.36.1 (*)
|         +--- com.slack.api:slack-app-backend:1.36.1 (*)

Java Runtime version

openjdk version "11.0.17" 2022-10-18 LTS

OS info

ProductName: macOS
ProductVersion: 14.1.1
BuildVersion: 23B81
Darwin Kernel Version 23.1.0: Mon Oct 9 21:27:24 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T6000
akshayamaldhure commented 8 months ago

For this issue, I tried some Google search and came across this answer https://stackoverflow.com/a/26288190. So I thought of opening this question here in this forum.

seratch commented 8 months ago

Hi @akshayamaldhure, thanks for asking the question.

I've never heard of this type of issues. With the given information so far, I don't think this SDK can be the cause of the issue. So, we may not be able to help you out for this question. If you observe a behavior difference (or misbehavior if you call it so) only when running your code as part of a uber jar file, please consider asking for help to the project maintainers with minimum repro steps.

Hope you'll figure the cause out soon!

akshayamaldhure commented 8 months ago

@seratch I believe you right, because what I get during the debug process is not an exception but an error (NoClassDefFoundError), which is not supposed to caught using the try-catch block with an Exception e declaration. Sorry about confusion. I'll get to the bottom of this. Thank you for the quick response.