Use the following command
jps -mlvV
This should print everything about running java processes.
Where ps -e should indicate the executable path.
The following is a pure Java solution, it does not output the actual command used to execute the application, but creates a command that will have the same effect.
import java.io.File; import java.lang.management.ManagementFactory; import java.util.List; import java.util.Map.Entry; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { System.out.println("Printing command"); createCommand(); } public static void createCommand() { try { String jvm = getJvmExecutable(); String mainClassName = findMainClass(); String processDir = System.getProperty("user.dir"); String arguments = getArguments(); String classpath = ManagementFactory.getRuntimeMXBean().getClassPath(); String command = String.format("cd %s & %s %s -classpath %s %s",processDir, jvm, arguments, classpath, mainClassName); System.out.println(command); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private static String getJvmExecutable() { String jvm = ""; jvm = System.getProperty("java.home"); jvm += File.separator + "bin" + File.separator + "java"; jvm = '"' + jvm + '"'; return jvm; } private static String getArguments() { List<String> argsList = ManagementFactory.getRuntimeMXBean().getInputArguments(); String args = argsList.stream().collect(Collectors.joining(" ")); return args; } public static String findMainClass() throws ClassNotFoundException{ for (Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) { Thread thread = entry.getKey(); if (thread.getThreadGroup() != null && thread.getThreadGroup().getName().equals("main")) { for (StackTraceElement stackTraceElement : entry.getValue()) { if (stackTraceElement.getMethodName().equals("main")) { try { Class<?> c = Class.forName(stackTraceElement.getClassName()); Class[] argTypes = new Class[] { String[].class };
Note. . It will work with regular java projects or regular JARS, however it will not work with special class loads, such as WAR, OSGI or Spring Load class loading.
I used the findMainClass() method from this answer fooobar.com/questions/1253684 / ...
source share