Java - Addon V8 Repack
set_target_properties(v8repack PROPERTIES LIBRARY_OUTPUT_DIRECTORY $CMAKE_BINARY_DIR/lib PREFIX "" SUFFIX ".so" )
Here is a simple Java program that executes JavaScript inside the V8 engine:
import com.eclipsesource.j2v8.V8;public class V8RepackDemo public static void main(String[] args) // Create a V8 runtime (this loads the repacked native library) V8 v8 = V8.createV8Runtime(); java addon v8 repack
try // Execute simple JavaScript int result = v8.executeIntegerScript("const a = 5; const b = 10; a + b;"); System.out.println("JS Result: " + result); // Output: 15 // Execute multi-line script with function v8.executeVoidScript("function multiply(x, y) return x * y; "); // Call the JS function from Java Object multiplyResult = v8.executeJSFunction("multiply", 7, 8); System.out.println("Multiplication result: " + multiplyResult); // Output: 56 finally // Crucial: Release native memory to avoid leaks v8.release();
If you must repack:
# Use depot_tools, pin a V8 version
fetch v8
cd v8
git checkout tags/11.8.172
gn gen out/linux --args='is_debug=false v8_monolithic=true use_custom_libcxx=false'
ninja -C out/linux v8_monolith
Then JNI wrapper must:
A repacked V8 is a giant C++ attack surface exposed through Java.
Worse: repacks often skip V8’s Isolate isolation, mixing JS contexts in a way that lets one script corrupt another’s heap. Here is a simple Java program that executes
mkdir -p build && cd build cmake .. -DV8_ROOT=../v8/out/x64.release make