{"record":{"id":"b5052439557a8c59","repo":"alibaba/arthas","slug":"can-not-find-java-java-exe-executable-file-under-j","errorCode":null,"errorMessage":"Can not find java/java.exe executable file under java home: {javaHome}","messagePattern":"Can not find java/java\\.exe executable file under java home: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java","lineNumber":285,"sourceCode":"                }\n\n                throw new IllegalArgumentException(\"Can not find tools.jar under java home: \" + javaHome\n                        + \", please try to start arthas-boot with full path java. Such as /opt/jdk/bin/java -jar arthas-boot.jar\");\n            }\n        } else {\n            FOUND_JAVA_HOME = javaHome;\n        }\n        return FOUND_JAVA_HOME;\n    }\n\n    public static void startArthasCore(long targetPid, List<String> attachArgs) {\n        // find java/java.exe, then try to find tools.jar\n        String javaHome = findJavaHome();\n\n        // find java/java.exe\n        File javaPath = findJava(javaHome);\n        if (javaPath == null) {\n            throw new IllegalArgumentException(\n                    \"Can not find java/java.exe executable file under java home: \" + javaHome);\n        }\n\n        File toolsJar = findToolsJar(javaHome);\n\n        if (JavaVersionUtils.isLessThanJava9()) {\n            if (toolsJar == null || !toolsJar.exists()) {\n                throw new IllegalArgumentException(\"Can not find tools.jar under java home: \" + javaHome);\n            }\n        }\n\n        List<String> command = new ArrayList<String>();\n        command.add(javaPath.getAbsolutePath());\n\n        if (toolsJar != null && toolsJar.exists()) {\n            command.add(\"-Xbootclasspath/a:\" + toolsJar.getAbsolutePath());\n        }\n","sourceCodeStart":267,"sourceCodeEnd":303,"githubUrl":"https://github.com/alibaba/arthas/blob/21cf2e9ba52b305290be7223b980ff504bb9cb5b/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java#L267-L303","documentation":"ProcessUtils.startArthasCore calls findJava(javaHome) to locate the java/java.exe executable. If findJava returns null (no bin/java or bin/java.exe under the resolved home), it throws IllegalArgumentException(\"Can not find java/java.exe executable file under java home: <home>\").","triggerScenarios":"javaHome resolves to a directory that lacks a bin/java (or bin/java.exe on Windows) entry — e.g. a JRE without java, a partial install, or a home path pointing at lib/ rather than the JDK root.","commonSituations":"Broken JDK install missing the bin/ launcher; JAVA_HOME pointing at a nested jre/ dir; container with only runtime files; Windows/Linux exe-name mismatch in a misconfigured environment.","solutions":["Confirm $JAVA_HOME/bin/java (or java.exe) exists and is executable.","Reset JAVA_HOME to the JDK root that contains bin/java.","Reinstall/repair the JDK so the launcher is present.","On Windows ensure the home has bin/java.exe (not just javaw.exe)."],"exampleFix":"# before\nexport JAVA_HOME=/opt/jdk/lib        # wrong: no bin/java\n\n# after\nexport JAVA_HOME=/opt/jdk            # has bin/java\nls $JAVA_HOME/bin/java && java -jar arthas-boot.jar","handlingStrategy":"validation","validationCode":"File j = new File(javaHome, \"bin/java\");\nif (!j.isFile()) j = new File(javaHome, \"bin/java.exe\");\nif (!j.isFile()) {\n    throw new IllegalStateException(\"no java launcher under \" + javaHome);\n}","typeGuard":"static boolean hasJavaLauncher(String javaHome) {\n    if (javaHome == null) return false;\n    return new File(javaHome, \"bin/java\").isFile()\n        || new File(javaHome, \"bin/java.exe\").isFile();\n}","tryCatchPattern":"try {\n    ProcessUtils.startArthasCore(pid, args);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"java/java.exe\")) {\n        // reset JAVA_HOME to a JDK that has bin/java\n    } else throw e;\n}","preventionTips":["Ensure $JAVA_HOME/bin/java exists and is executable.","Point JAVA_HOME at the JDK root, not a nested jre/.","On Windows verify bin/java.exe is present."],"tags":["boot","jdk","java-home","environment","executable"],"backgroundTag":null,"analyzedSha":"21cf2e9ba52b305290be7223b980ff504bb9cb5b","analyzedAt":"2026-08-14T00:57:07.243Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}