8000 Fix Java shared library path for darwin (#11792) · localstack/localstack@8cf2836 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8cf2836

Browse files
viren-nadkarnizaingz
authored andcommitted
Fix Java shared library path for darwin (#11792)
1 parent 2ea4d6e commit 8cf2836

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

localstack-core/localstack/packages/java.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ def get_java_home(self) -> str | None:
3939
"""
4040
return java_package.get_installer().get_java_home()
4141

42+
def get_java_lib_path(self) -> str | None:
43+
"""
44+
Returns the path to the Java shared library.
45+
"""
46+
if java_home := self.get_java_home():
47+
if is_mac_os():
48+
return os.path.join(java_home, "Contents", "Home", "lib", "jli", "libjli.dylib")
49+
return os.path.join(java_home, "lib", "server", "libjvm.so")
50+
4251
def get_java_env_vars(self, path: str = None, ld_library_path: str = None) -> dict[str, str]:
4352
"""
4453
Returns environment variables pointing to the Java installation. This is useful to build the environment where
@@ -74,6 +83,8 @@ def __init__(self, version: str):
7483
super().__init__("java", version, extract_single_directory=True)
7584

7685
def _get_install_marker_path(self, install_dir: str) -> str:
86+
if is_mac_os():
87+
return os.path.join(install_dir, "Contents", "Home", "bin", "java")
7788
return os.path.join(install_dir, "bin", "java")
7889

7990
def _get_download_url(self) -> str:

localstack-core/localstack/services/events/event_ruler.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,23 @@ def start_jvm() -> None:
2727

2828
if not jpype.isJVMStarted():
2929
jvm_lib, event_ruler_libs_path = get_jpype_lib_paths()
30-
event_ruler_libs_pattern = event_ruler_libs_path.joinpath("*")
30+
event_ruler_libs_pattern = Path(event_ruler_libs_path).joinpath("*")
3131

32-
jpype.startJVM(str(jvm_lib), classpath=[event_ruler_libs_pattern])
32+
jpype.startJVM(jvm_lib, classpath=[event_ruler_libs_pattern])
3333

3434

3535
@cache
36-
def get_jpype_lib_paths() -> Tuple[Path, Path]:
36+
def get_jpype_lib_paths() -> Tuple[str, str]:
3737
"""
3838
Downloads Event Ruler, its dependencies and returns a tuple of:
39-
- Path to libjvm.so to be used by JPype as jvmpath. JPype requires this to start the JVM.
39+
- Path to libjvm.so/libjli.dylib to be used by JPype as jvmpath. JPype requires this to start the JVM.
4040
See https://jpype.readthedocs.io/en/latest/userguide.html#path-to-the-jvm
4141
- Path to Event Ruler libraries to be used by JPype as classpath
4242
"""
4343
installer = event_ruler_package.get_installer()
4444
installer.install()
4545

46-
java_home = installer.get_java_home()
47-
jvm_lib = Path(java_home) / "lib" / "server" / "libjvm.so"
48-
49-
return jvm_lib, Path(installer.get_installed_dir())
46+
return installer.get_java_lib_path(), installer.get_installed_dir()
5047

5148

5249
def matches_rule(event: str, rule: str) -> bool:

0 commit comments

Comments
 (0)
0