[Bug report] Runner constructs invalid command if parent process's arguments contain spaces

Tomasz Grabiec tgrabiec at gmail.com
Mon Apr 29 07:03:24 PDT 2013


Hi,

I tried to use JMH to run a harness from InteliJ IDE as a convenience and
noticed that it fails.

Run config:
 - main class: org.openjdk.jmh.Main
 - JVM args: ".*JMHSample_02_BenchmarkTypes.*"  -i 5 -r 1s -v

Output:
  (in the attached file)

The problem is not limited to using IntelliJ but results from the fact
IntelliJ runner sets some java properties to paths which contain spaces:
  -Didea.launcher.bin.path=C:\Program Files (x86)...

After applying the following change the problem is fixed for me. I realize
though this is not how a proper escaping should look like.
jmh-core/src/main/java/org/openjdk/jmh/runner/options/HarnessOptions.java
@@ -204,7 +204,7 @@
             }

             for (String arg : args) {
-                jvmArguments.append(arg);
+                jvmArguments.append("\"").append(arg).append("\"");
                 jvmArguments.append(' ');
             }

Regards,
Tomasz Grabiec
-------------- next part --------------
C:\java\jre7\bin\java -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\bin" -Dfile.encoding=UTF-8 -classpath "C:\java\jre7\lib\charsets.jar;C:\java\jre7\lib\deploy.jar;C:\java\jre7\lib\javaws.jar;C:\java\jre7\lib\jce.jar;C:\java\jre7\lib\jfr.jar;C:\java\jre7\lib\jfxrt.jar;C:\java\jre7\lib\jsse.jar;C:\java\jre7\lib\management-agent.jar;C:\java\jre7\lib\plugin.jar;C:\java\jre7\lib\resources.jar;C:\java\jre7\lib\rt.jar;C:\java\jre7\lib\ext\access-bridge-32.jar;C:\java\jre7\lib\ext\dnsns.jar;C:\java\jre7\lib\ext\jaccess.jar;C:\java\jre7\lib\ext\localedata.jar;C:\java\jre7\lib\ext\sunec.jar;C:\java\jre7\lib\ext\sunjce_provider.jar;C:\java\jre7\lib\ext\sunmscapi.jar;C:\java\jre7\lib\ext\sunpkcs11.jar;C:\java\jre7\lib\ext\zipfs.jar;C:\cygwin\home\Tomek\src\benchmarks\target\classes;C:\Users\Tomek\.m2\repository\org\openjdk\jmh\jmh-core\1.0-SNAPSHOT\jmh-core-1.0-SNAPSHOT.jar;C:\Users\Tomek\.m2\repository\args4j\args4j\2.0.16\args4j-2.0.16.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.openjdk.jmh.Main .*JMHSample_02_BenchmarkTypes.* -i 5 -r 1s -v
Benchmarks: 
org.openjdk.jmh.samples.generated.avgtime.JMHSample_02_BenchmarkTypes.measureAvgTime
org.openjdk.jmh.samples.generated.oneshot.JMHSample_02_BenchmarkTypes.measureSingleShot
org.openjdk.jmh.samples.generated.sampletime.JMHSample_02_BenchmarkTypes.measureSamples
org.openjdk.jmh.samples.generated.throughput.JMHSample_02_BenchmarkTypes.measureThroughput
# Measurement Section
Forking using command: C:\java\jre7\bin\java.exe -Didea.launcher.port=7534 -Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\bin -Dfile.encoding=UTF-8  -cp "C:\java\jre7\lib\charsets.jar;C:\java\jre7\lib\deploy.jar;C:\java\jre7\lib\javaws.jar;C:\java\jre7\lib\jce.jar;C:\java\jre7\lib\jfr.jar;C:\java\jre7\lib\jfxrt.jar;C:\java\jre7\lib\jsse.jar;C:\java\jre7\lib\management-agent.jar;C:\java\jre7\lib\plugin.jar;C:\java\jre7\lib\resources.jar;C:\java\jre7\lib\rt.jar;C:\java\jre7\lib\ext\access-bridge-32.jar;C:\java\jre7\lib\ext\dnsns.jar;C:\java\jre7\lib\ext\jaccess.jar;C:\java\jre7\lib\ext\localedata.jar;C:\java\jre7\lib\ext\sunec.jar;C:\java\jre7\lib\ext\sunjce_provider.jar;C:\java\jre7\lib\ext\sunmscapi.jar;C:\java\jre7\lib\ext\sunpkcs11.jar;C:\java\jre7\lib\ext\zipfs.jar;C:\cygwin\home\Tomek\src\benchmarks\target\classes;C:\Users\Tomek\.m2\repository\org\openjdk\jmh\jmh-core\1.0-SNAPSHOT\jmh-core-1.0-SNAPSHOT.jar;C:\Users\Tomek\.m2\repository\args4j\args4j\2.0.16\args4j-2.0.16.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\lib\idea_rt.jar" org.openjdk.jmh.ForkedMain org.openjdk.jmh.samples.generated.avgtime.JMHSample_02_BenchmarkTypes.measureAvgTime -i 5 -r 1s -v true  --hostName 169.254.35.151 --hostPort 57251
Error: Could not find or load main class Files
WARNING: Forked process returned code: 1
Forking using command: C:\java\jre7\bin\java.exe -Didea.launcher.port=7534 -Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\bin -Dfile.encoding=UTF-8  -cp "C:\java\jre7\lib\charsets.jar;C:\java\jre7\lib\deploy.jar;C:\java\jre7\lib\javaws.jar;C:\java\jre7\lib\jce.jar;C:\java\jre7\lib\jfr.jar;C:\java\jre7\lib\jfxrt.jar;C:\java\jre7\lib\jsse.jar;C:\java\jre7\lib\management-agent.jar;C:\java\jre7\lib\plugin.jar;C:\java\jre7\lib\resources.jar;C:\java\jre7\lib\rt.jar;C:\java\jre7\lib\ext\access-bridge-32.jar;C:\java\jre7\lib\ext\dnsns.jar;C:\java\jre7\lib\ext\jaccess.jar;C:\java\jre7\lib\ext\localedata.jar;C:\java\jre7\lib\ext\sunec.jar;C:\java\jre7\lib\ext\sunjce_provider.jar;C:\java\jre7\lib\ext\sunmscapi.jar;C:\java\jre7\lib\ext\sunpkcs11.jar;C:\java\jre7\lib\ext\zipfs.jar;C:\cygwin\home\Tomek\src\benchmarks\target\classes;C:\Users\Tomek\.m2\repository\org\openjdk\jmh\jmh-core\1.0-SNAPSHOT\jmh-core-1.0-SNAPSHOT.jar;C:\Users\Tomek\.m2\repository\args4j\args4j\2.0.16\args4j-2.0.16.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\lib\idea_rt.jar" org.openjdk.jmh.ForkedMain org.openjdk.jmh.samples.generated.oneshot.JMHSample_02_BenchmarkTypes.measureSingleShot -i 5 -r 1s -v true  --hostName 169.254.35.151 --hostPort 57251
Error: Could not find or load main class Files
WARNING: Forked process returned code: 1
Forking using command: C:\java\jre7\bin\java.exe -Didea.launcher.port=7534 -Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\bin -Dfile.encoding=UTF-8  -cp "C:\java\jre7\lib\charsets.jar;C:\java\jre7\lib\deploy.jar;C:\java\jre7\lib\javaws.jar;C:\java\jre7\lib\jce.jar;C:\java\jre7\lib\jfr.jar;C:\java\jre7\lib\jfxrt.jar;C:\java\jre7\lib\jsse.jar;C:\java\jre7\lib\management-agent.jar;C:\java\jre7\lib\plugin.jar;C:\java\jre7\lib\resources.jar;C:\java\jre7\lib\rt.jar;C:\java\jre7\lib\ext\access-bridge-32.jar;C:\java\jre7\lib\ext\dnsns.jar;C:\java\jre7\lib\ext\jaccess.jar;C:\java\jre7\lib\ext\localedata.jar;C:\java\jre7\lib\ext\sunec.jar;C:\java\jre7\lib\ext\sunjce_provider.jar;C:\java\jre7\lib\ext\sunmscapi.jar;C:\java\jre7\lib\ext\sunpkcs11.jar;C:\java\jre7\lib\ext\zipfs.jar;C:\cygwin\home\Tomek\src\benchmarks\target\classes;C:\Users\Tomek\.m2\repository\org\openjdk\jmh\jmh-core\1.0-SNAPSHOT\jmh-core-1.0-SNAPSHOT.jar;C:\Users\Tomek\.m2\repository\args4j\args4j\2.0.16\args4j-2.0.16.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\lib\idea_rt.jar" org.openjdk.jmh.ForkedMain org.openjdk.jmh.samples.generated.sampletime.JMHSample_02_BenchmarkTypes.measureSamples -i 5 -r 1s -v true  --hostName 169.254.35.151 --hostPort 57251
Error: Could not find or load main class Files
WARNING: Forked process returned code: 1
Forking using command: C:\java\jre7\bin\java.exe -Didea.launcher.port=7534 -Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\bin -Dfile.encoding=UTF-8  -cp "C:\java\jre7\lib\charsets.jar;C:\java\jre7\lib\deploy.jar;C:\java\jre7\lib\javaws.jar;C:\java\jre7\lib\jce.jar;C:\java\jre7\lib\jfr.jar;C:\java\jre7\lib\jfxrt.jar;C:\java\jre7\lib\jsse.jar;C:\java\jre7\lib\management-agent.jar;C:\java\jre7\lib\plugin.jar;C:\java\jre7\lib\resources.jar;C:\java\jre7\lib\rt.jar;C:\java\jre7\lib\ext\access-bridge-32.jar;C:\java\jre7\lib\ext\dnsns.jar;C:\java\jre7\lib\ext\jaccess.jar;C:\java\jre7\lib\ext\localedata.jar;C:\java\jre7\lib\ext\sunec.jar;C:\java\jre7\lib\ext\sunjce_provider.jar;C:\java\jre7\lib\ext\sunmscapi.jar;C:\java\jre7\lib\ext\sunpkcs11.jar;C:\java\jre7\lib\ext\zipfs.jar;C:\cygwin\home\Tomek\src\benchmarks\target\classes;C:\Users\Tomek\.m2\repository\org\openjdk\jmh\jmh-core\1.0-SNAPSHOT\jmh-core-1.0-SNAPSHOT.jar;C:\Users\Tomek\.m2\repository\args4j\args4j\2.0.16\args4j-2.0.16.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.0\lib\idea_rt.jar" org.openjdk.jmh.ForkedMain org.openjdk.jmh.samples.generated.throughput.JMHSample_02_BenchmarkTypes.measureThroughput -i 5 -r 1s -v true  --hostName 169.254.35.151 --hostPort 57251
Error: Could not find or load main class Files
WARNING: Forked process returned code: 1

Process finished with exit code 0


More information about the jmh-dev mailing list