Between 1.4.2 and the versions v1.6+ of the JDK, changes have been made to the creation of processes. These changes bring benefits, in particular in the light of a [[Nasty Bug|nasty bug]] found by Soumaya and Venera when running [[MoDeC]] on MacOS. ====== Java Class Process ===== The Java class Process is used together with class Runtime. As explained by Oracle: "The Runtime.exec methods create a native process and return an instance of a subclass of Process that can be used to control the process and obtain information about it. The class Process provides methods for performing input from the process, performing output to the process, waiting for the process to complete, checking the exit status of the process, and destroying (killing) the process." (from the [[http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html|Javadocs of version 1.4.2]]). Typically, in [[MoDeC]], we created and ran a Process that executes a new Java virtual machine, which itself runs a program whose bytecodes we had instrumented to collect traces. Simply put: final String commandLine = ...; final File absolutePathToInstrumentedFiles = ...; final Process process = Runtime.getRuntime().exec( commandLine, new String[0], absolutePathToInstrumentedFiles); where * commandLine is the complete command line to run a new Java virtual machine; * new string[0] tells the Runime.exec() that we do not touch the environment; * absolutePathToInstrumentedFiles is a File pointing on the root directory containing the instrumented bytecodes. ====== The Bug ====== When applying [[MoDeC]] on "small" programs, we did not encounter any problem, neither on Windows nor on MacOS. However, when Soumaya ran [[MoDeC]] on the instrumented version of ArgoUML v0.19.8, she got this exception (here reproduced using Venera's Mac): Exception in thread "main" java.lang.NoClassDefFoundError: Invoker/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/pdf-transcoder/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-anim/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-bridge/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-codec/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-extension/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gui-util/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gvt/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-script/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-swing/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-transcoder/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-parser/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-css/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svg-dom/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-ext/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/commons-lang-2/4/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/tools/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xalan-2/6/0/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xerces_2_5_0/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis-ext/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/cfparse:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/bcel:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-awt-util/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-dom/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svggen/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-util/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-xml/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/trove-3/0/0a3/jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCMetamodel/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Caused by: java.lang.ClassNotFoundException: Invoker.bin:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.pdf-transcoder.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-anim.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-bridge.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-codec.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-extension.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-gui-util.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-gvt.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-script.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-swing.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-transcoder.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-parser.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-css.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-svg-dom.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-ext.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.commons-lang-2.4.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.bin:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.tools.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.xalan-2.6.0.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.xerces_2_5_0.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.xml-apis.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.xml-apis-ext.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.cfparse:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.bcel:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-awt-util.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-dom.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-svggen.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-util.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.batik-xml.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.CPL.lib.trove-3.0.0a3.jar:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.MoDeCMetamodel.bin:.Users.Neni.Documents.Research.2013-LabalingTraceSegm.eclipseWS.MoDeC at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) which was very puzzling, because the //same// version of [[MoDeC]] and the //same// input file and the //same// instrumented bytecodes would work on Yann's Windows laptop and produce the expected traces. ====== The Solution ====== After much tinkering, we managed to get [[MoDeC]] to work by using the "new" class ProcessBuilder because "As of 1.5, ProcessBuilder.start() is the preferred way to create a Process." (according to [[http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html|Oracle]] in a version of the Javadocs subsequent to 1.5). We modified essentially the code as follows: final ProcessBuilder pb = new ProcessBuilder(commandLine); pb.directory(absolutePathToInstrumentedFiles); final Process process = pb.start(); With these changes, the same input file and the same instrumented bytecodes would produce the same, expected traces in both Windows and MacOS computers! Soumaya and Venera could now continue their research works 8-). However, these changes were not satisfying because they did not explain why... So, after some more tinkering, it appeared that it is **not** ProcessBuilder that saved the day but the implementations of the Runtime.exec() methods that have different behaviour on Windows and MacOS. The class Runtime provides several exec() methods to create new processes but two are of particular interest here: - Runtime.exec(String command, String[] envp, File dir): "Executes the specified string command in a separate process with the specified environment and working directory." - Runtime.exec(String[] command, String[] envp, File dir): "Executes the specified command **and arguments** in a separate process with the specified environment and working directory." (bold added). In previous versions of [[MoDeC]], we used the first method, e.g., in the case of ArgoUML with the following command: final String command = "java -classpath "/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Invoker/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/pdf-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-anim.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-bridge.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-codec.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-extension.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gui-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gvt.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-script.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-swing.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-parser.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-css.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svg-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/commons-lang-2.4.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/tools.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xalan-2.6.0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xerces_2_5_0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/cfparse:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/bcel:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-awt-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svggen.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-xml.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/trove-3.0.0a3.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCMetamodel/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Bytecode Instrumentation/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Bytecode Instrumentation Tests/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/InstrumentedClasses/ArgoUMLv0.19.8:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/antlrall-2.7.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/commons-logging-1.0.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/gef-0.11.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmi-1.0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmi.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmiuml-1.4di.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmiutils.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/log4j-1.2.6.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/mdr.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/mof.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/nsuml-0.4.20_modified.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/ocl-argo-1.1.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-netbeans-api-mdr.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-netbeans-jmi-javamodel.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-openide-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/swidgets-0.1.1.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/toolbar-1.1.0.jar" org.argouml.application.Main" which worked fine on Windows **but not** on MacOS. In new versions of [[MoDeC]], independently of the use of ProcessBuilder, we (could) use the second method and it would work similarly on both Windows and MacOS, with the same following command: String[] command = new String[] { "java", "-classpath", "/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Invoker/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/pdf-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-anim.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-bridge.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-codec.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-extension.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gui-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gvt.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-script.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-swing.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-parser.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-css.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svg-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/commons-lang-2.4.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/tools.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xalan-2.6.0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xerces_2_5_0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/cfparse:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/bcel:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-awt-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svggen.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-xml.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/trove-3.0.0a3.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCMetamodel/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Bytecode Instrumentation/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Bytecode Instrumentation Tests/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/InstrumentedClasses/ArgoUMLv0.19.8:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/antlrall-2.7.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/commons-logging-1.0.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/gef-0.11.2.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmi-1.0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmi.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmiuml-1.4di.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/jmiutils.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/log4j-1.2.6.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/mdr.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/mof.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/nsuml-0.4.20_modified.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/ocl-argo-1.1.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-netbeans-api-mdr.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-netbeans-jmi-javamodel.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/org-openide-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/swidgets-0.1.1.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeCBytecodeInstrumentationTests/ArgoUMLv0.19.8/lib/toolbar-1.1.0.jar", org.argouml.application.Main" }; So, the difference is //simply// the use of the Runtime.exec(String, String[], File) on Windows, broken on MacOS, and the use of the Runtime.exec(String[], String[], File), which behaves as expected on both Windows and MacOS! 8-O The conclusion is: break down any command line in an array of its components (command, argument 1, ..., argument N) and the Runtime.exec(String[]) method takes care of the rest for you. ====== Acknowledgements ====== This bug could not have been found without the dedicated MacOS users of the lab. Soumaya and Venera ;-). This bug could not have been fixed without Venera's great help and patience!