Lines 12-17
package org.eclipse.jdt.internal.launching;
Link Here
|
12 |
|
12 |
|
13 |
|
13 |
|
14 |
import java.io.File; |
14 |
import java.io.File; |
|
|
15 |
import java.io.FileOutputStream; |
16 |
import java.io.InputStream; |
17 |
import java.io.OutputStream; |
18 |
import java.io.OutputStreamWriter; |
15 |
import java.util.ArrayList; |
19 |
import java.util.ArrayList; |
16 |
import java.util.Date; |
20 |
import java.util.Date; |
17 |
import java.util.Iterator; |
21 |
import java.util.Iterator; |
Lines 290-300
public class StandardVMRunner extends AbstractVMRunner {
Link Here
|
290 |
addBootClassPathArguments(arguments, config); |
294 |
addBootClassPathArguments(arguments, config); |
291 |
|
295 |
|
292 |
String[] cp= config.getClassPath(); |
296 |
String[] cp= config.getClassPath(); |
|
|
297 |
int classpathArgIndex = -1; |
293 |
if (cp.length > 0) { |
298 |
if (cp.length > 0) { |
294 |
arguments.add("-classpath"); //$NON-NLS-1$ |
299 |
arguments.add("-classpath"); //$NON-NLS-1$ |
|
|
300 |
classpathArgIndex = arguments.size(); |
295 |
arguments.add(convertClassPath(cp)); |
301 |
arguments.add(convertClassPath(cp)); |
296 |
} |
302 |
} |
297 |
arguments.add(config.getClassToLaunch()); |
303 |
arguments.add(config.getClassToLaunch()); |
|
|
304 |
|
305 |
shortenCommandLine(classpathArgIndex, arguments, cp, config); |
298 |
|
306 |
|
299 |
String[] programArgs= config.getProgramArguments(); |
307 |
String[] programArgs= config.getProgramArguments(); |
300 |
addArguments(programArgs, arguments); |
308 |
addArguments(programArgs, arguments); |
Lines 377-382
public class StandardVMRunner extends AbstractVMRunner {
Link Here
|
377 |
return env; |
385 |
return env; |
378 |
} |
386 |
} |
379 |
|
387 |
|
|
|
388 |
protected void shortenCommandLine(int classpathArgIndex, List arguments, String[] cp, VMRunnerConfiguration config) { |
389 |
if (classpathArgIndex > -1 |
390 |
&& ((String)arguments.get(classpathArgIndex)).length() > 256 // can be shortened |
391 |
&& File.separatorChar == '\\' // is Windows |
392 |
) |
393 |
{ |
394 |
int cmdLen = 0; |
395 |
for (int i = 0, sz = arguments.size(); i < sz; i++) { |
396 |
cmdLen += ((String)arguments.get(i)).length() + 1; |
397 |
} |
398 |
if (cmdLen > 30000) { |
399 |
File lclF; |
400 |
ArrayList lclShortCp = new ArrayList(); |
401 |
try { |
402 |
lclF = File.createTempFile("eclipse", "tmp"); //$NON-NLS-1$//$NON-NLS-2$ |
403 |
String lclTempDir = lclF.getAbsolutePath(); |
404 |
lclF.delete(); |
405 |
lclF.mkdir(); |
406 |
Class lclClazz = LongCommandLineLauncher.class; |
407 |
String lclClassName = lclClazz.getName().replace('.', '/'); |
408 |
String lclClassFile = lclClassName.concat(".class"); //$NON-NLS-1$ |
409 |
|
410 |
String lclAbsClassFile = lclTempDir + '/' + lclClassFile; |
411 |
new File(lclAbsClassFile).getParentFile().mkdirs(); |
412 |
ClassLoader lclCL = lclClazz.getClassLoader(); |
413 |
InputStream lclIS = lclCL.getResourceAsStream(lclClassFile); |
414 |
OutputStream lclOS = new FileOutputStream(lclAbsClassFile); |
415 |
byte[] lclBuf = new byte[1024]; |
416 |
int lclNB; |
417 |
while(-1 != (lclNB = lclIS.read(lclBuf, 0, lclBuf.length))) { |
418 |
lclOS.write(lclBuf, 0, lclNB); |
419 |
} |
420 |
lclOS.close(); |
421 |
lclIS.close(); |
422 |
|
423 |
lclF = File.createTempFile("urls", ".lst"); //$NON-NLS-1$//$NON-NLS-2$ |
424 |
OutputStreamWriter lclExtractWriter = new OutputStreamWriter(new FileOutputStream(lclF), "UTF-8"); //$NON-NLS-1$ |
425 |
String urlsfile = lclF.getAbsolutePath(); |
426 |
File workingDir = getWorkingDir(config); |
427 |
|
428 |
for (int i = 0; i < cp.length; i++) { |
429 |
String cpEntry = cp[i]; |
430 |
lclF = new File(cpEntry); |
431 |
if (workingDir != null && !lclF.isAbsolute()) |
432 |
lclF = new File(new File(workingDir.getPath() + '/' + lclF.getPath()).getCanonicalPath()); |
433 |
|
434 |
lclExtractWriter.append(lclF.toURI().toString()); |
435 |
lclExtractWriter.append('\n'); |
436 |
} |
437 |
lclExtractWriter.close(); |
438 |
lclShortCp.add(lclTempDir); |
439 |
String[] shortCpA = new String[lclShortCp.size()]; |
440 |
lclShortCp.toArray(shortCpA); |
441 |
arguments.set(classpathArgIndex, convertClassPath(shortCpA)); |
442 |
String realMainClass = (String)arguments.get(classpathArgIndex+1); |
443 |
arguments.set(classpathArgIndex+1, lclClassName); |
444 |
ArrayList lclList = new ArrayList(2); |
445 |
lclList.add(urlsfile); |
446 |
lclList.add(realMainClass); |
447 |
arguments.addAll(classpathArgIndex+2, lclList); |
448 |
} catch(Exception e) { |
449 |
e.printStackTrace(); |
450 |
// falback to normal |
451 |
} |
452 |
} |
453 |
} |
454 |
} |
455 |
|
380 |
/** |
456 |
/** |
381 |
* Adds arguments to the bootpath |
457 |
* Adds arguments to the bootpath |
382 |
* @param arguments |
458 |
* @param arguments |
383 |
- |
|
|