diff --git a/java/BUILD.bazel b/java/BUILD.bazel
index 9baaa3f27..50888d48c 100644
--- a/java/BUILD.bazel
+++ b/java/BUILD.bazel
@@ -97,6 +97,7 @@ define_java_module(
deps = [
":org_ray_ray_api",
":org_ray_ray_runtime",
+ "@maven//:com_google_code_gson_gson",
"@maven//:com_google_guava_guava",
"@maven//:com_sun_xml_bind_jaxb_core",
"@maven//:com_sun_xml_bind_jaxb_impl",
diff --git a/java/dependencies.bzl b/java/dependencies.bzl
index 1f73b9b48..791b24b12 100644
--- a/java/dependencies.bzl
+++ b/java/dependencies.bzl
@@ -4,6 +4,7 @@ def gen_java_deps():
maven_install(
artifacts = [
"com.beust:jcommander:1.72",
+ "com.google.code.gson:gson:2.8.5",
"com.google.guava:guava:27.0.1-jre",
"com.google.protobuf:protobuf-java:3.8.0",
"com.puppycrawl.tools:checkstyle:8.15",
diff --git a/java/test/pom.xml b/java/test/pom.xml
index 3dfbbbae8..48075ba8c 100644
--- a/java/test/pom.xml
+++ b/java/test/pom.xml
@@ -27,6 +27,11 @@
ray-runtime
${project.version}
+
+ com.google.code.gson
+ gson
+ 2.8.5
+
com.google.guava
guava
diff --git a/java/test/src/main/java/org/ray/api/test/BaseMultiLanguageTest.java b/java/test/src/main/java/org/ray/api/test/BaseMultiLanguageTest.java
index 379005562..40c5cd5ab 100644
--- a/java/test/src/main/java/org/ray/api/test/BaseMultiLanguageTest.java
+++ b/java/test/src/main/java/org/ray/api/test/BaseMultiLanguageTest.java
@@ -3,6 +3,7 @@ package org.ray.api.test;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.gson.Gson;
import java.io.File;
import java.lang.ProcessBuilder.Redirect;
import java.util.List;
@@ -77,8 +78,7 @@ public abstract class BaseMultiLanguageTest {
String classpath = Stream.of(System.getProperty("java.class.path").split(":"))
.filter(s -> !s.contains(" ") && s.contains("test"))
.collect(Collectors.joining(":"));
- String workerOptions =
- " -classpath " + classpath;
+ String workerOptions = new Gson().toJson(ImmutableList.of("-classpath", classpath));
// Start ray cluster.
List startCommand = ImmutableList.of(
"ray",
diff --git a/java/test/src/main/resources/test_cross_language_invocation.py b/java/test/src/main/resources/test_cross_language_invocation.py
index 266016fbe..53f38e86a 100644
--- a/java/test/src/main/resources/test_cross_language_invocation.py
+++ b/java/test/src/main/resources/test_cross_language_invocation.py
@@ -52,7 +52,7 @@ def py_func_pass_python_actor_handle():
counter = Counter.remote(2)
f = ray.java_function("org.ray.api.test.CrossLanguageInvocationTest",
"callPythonActorHandle")
- r = f.remote(counter._serialization_helper())
+ r = f.remote(counter._serialization_helper()[0])
return ray.get(r)
diff --git a/python/ray/services.py b/python/ray/services.py
index 629a3feac..a03ea4baa 100644
--- a/python/ray/services.py
+++ b/python/ray/services.py
@@ -1247,7 +1247,8 @@ def start_raylet(redis_address,
if include_java is True:
default_cp = os.pathsep.join(DEFAULT_JAVA_WORKER_CLASSPATH)
java_worker_command = build_java_worker_command(
- java_worker_options or ["-classpath", default_cp],
+ json.loads(java_worker_options)
+ if java_worker_options else ["-classpath", default_cp],
redis_address,
node_manager_port,
plasma_store_name,