docs: @Override
  	public void run(VMRunnerConfiguration configuration, ILaunch launch, IProgressMonitor monitor)
  			throws CoreException {
  		try {
  			final String[] classpath = configuration.getClassPath();
  			final URL[] classPathURLs = new URL[classpath.length];
  			Arrays.parallelSetAll(classPathURLs, index -> {
  				String path = classpath[index];
  				final URL url = FileSystem.convertStringToURL(path, false);
  				path = url.getFile();
  				if (!path.endsWith(JAR_EXTENSION) && !path.endsWith(SLASH)) {
  					path = path + SLASH;
  				}
  				try {
  					return new URL(URISchemeType.FILE.name(), null, path);
  				} catch (MalformedURLException e) {
  					throw new RuntimeException(e);
  				}
  			});
  			monitor.done();
  			final Job myJob = new Job(launch.getLaunchConfiguration().getName()) {
  				@Override
  				public IStatus run(IProgressMonitor monitor) {
  					monitor.subTask(MessageFormat.format(Messages.EmbeddedVMRunner_0, launch.getLaunchConfiguration().getName()));
  					final DynamicURLClassLoader classLoader = DynamicURLClassLoader.newInstance(
  								ClassLoader.getSystemClassLoader(), classPathURLs);
  					try {
  						ClassLoaderFinder.setPreferredClassLoader(classLoader);
  						final String mainClass = configuration.getClassToLaunch();
  						final Class<?> clazz = classLoader.loadClass(mainClass);
  						final Method mainMethod = clazz.getDeclaredMethod("main", String[].class); //$NON-NLS-1$
  						mainMethod.invoke(null, (Object) configuration.getProgramArguments());
  						return SARLEclipsePlugin.getDefault().createOkStatus();
  					} catch (Throwable exception) {
  						return SARLEclipsePlugin.getDefault().createStatus(IStatus.ERROR, exception);
  					} finally {
  						ClassLoaderFinder.popPreferredClassLoader();
  						monitor.done();
  					}
  				}
  			};
  			myJob.schedule();
  		} catch (Exception exception) {
  			throw new CoreException(SARLEclipsePlugin.getDefault().createStatus(IStatus.ERROR, exception));
  		}
  	}