Repository navigation
Open
Description
I have a set of Java actions packaged in a jar file that I deploy on Bluemix. All Java code is packaged in a jar file with a lib directory that contains dependant jar files, in particular the Cloudant client. Simple actions that do not use any dependant libraries work fine. Actions that use the Cloudant library fail with a NoClassDefFoundError.
Environment details:
- Bluemix
- Build on Ubuntu 16.04
Steps to reproduce the issue:
- Build the code with gradle
- Deploy on bluemix (I use
wskdeploy) - Invoke the example/greeting action
- Invoke the example/cloudant-test action
Provide the expected results and outputs:
Result invoking example/greeting:
$ bx wsk action invoke example/greeting -b
ok: invoked /_/example/greeting with id 48d37cc2dfff42c2937cc2dfff42c2cb
{
"activationId": "48d37cc2dfff42c2937cc2dfff42c2cb",
"annotations": [
{
"key": "path",
"value": "consideratehoteliers.com_dev/example/greeting"
},
{
"key": "waitTime",
"value": 493
},
{
"key": "kind",
"value": "java"
},
{
"key": "limits",
"value": {
"logs": 10,
"memory": 256,
"timeout": 60000
}
},
{
"key": "initTime",
"value": 434
}
],
"duration": 460,
"end": 1522921174650,
"logs": [],
"name": "greeting",
"namespace": "consideratehoteliers.com_dev",
"publish": false,
"response": {
"result": {
"greeting": "Hello !"
},
"status": "success",
"success": true
},
"start": 1522921174190,
"subject": "bruno@imby.bio",
"version": "0.0.1"
}
Provide the actual results and outputs:
$ bx wsk action invoke example/cloudant_test -b
ok: invoked /_/example/cloudant_test with id b7b7df5cbc754685b7df5cbc752685c5
{
"activationId": "b7b7df5cbc754685b7df5cbc752685c5",
"annotations": [
{
"key": "path",
"value": "consideratehoteliers.com_dev/example/cloudant_test"
},
{
"key": "waitTime",
"value": 520
},
{
"key": "kind",
"value": "java"
},
{
"key": "limits",
"value": {
"logs": 10,
"memory": 256,
"timeout": 60000
}
},
{
"key": "initTime",
"value": 420
}
],
"duration": 447,
"end": 1522851950713,
"logs": [],
"name": "cloudant_test",
"namespace": "consideratehoteliers.com_dev",
"publish": false,
"response": {
"result": {
"error": "An error has occured while invoking the action (see logs for details): java.lang.NoClassDefFoundError: com/cloudant/client/api/ClientBuilder"
},
"status": "action developer error",
"success": false
},
"start": 1522851950266,
"subject": "bruno@imby.bio",
"version": "0.0.1"
}
Additional information you deem important:
See attached files that include:
- the
wskdeploymanifest - the
gradlebuild file - two Java classes that implement the actions mentioned above,
Hello.javathat works andCloudantTest.javathat doesn't
Metadata
Metadata
Assignees
Labels
No labels
Activity
rabbah commentedon Apr 6, 2018
Did you try locating the libraries at the root path instead of under /lib? Will have a look at your zip file.
brunogirin commentedon Apr 6, 2018
When I check the jar file, here's what's inside, the additional jar are in the
libfolder in the main jar:gorkem commentedon Apr 20, 2018
@rabbah Are dependencies packaged into /lib folder even supposed to work. This is not really a Java standard and I do not see anything to enable this on the runtime.
@brunogirin Do your functions work OK when you package them as one jar?
brunogirin commentedon Apr 26, 2018
@gorkem I didn't try that but will do when I have the time. That said, it raises a question of how to package dependencies that a particular Java action relies on.