	public static void realMain(String args[], PluginClassLoader pcl) throws Exception {
		System.out.println("ATL 0.2 Projector");
		System.out.println();
		long start = new Date().getTime();
		Map params = parseCommandLine(args);
		String plugins = (String)params.get("plugins");
		if(plugins != null) {
			String ss[] = plugins.split(",");
			for(Iterator i = Arrays.asList(ss).iterator() ; i.hasNext() ; ) {
				String plg = (String)i.next();
				System.out.println("Loading plugin: " + plg);
				pcl.addLocation(plg);
			}
		}
		String modelLoaderName = (String)params.get("ModelLoader");
		if(modelLoaderName == null)
			modelLoaderName = "MDR";
		ModelLoader ml = null;
		if(modelLoaderName.equals("MDR")) {
			ml = (ModelLoader)pcl.loadClass("org.eclipse.m2m.atl.drivers.mdr4atl.MDRModelLoader").newInstance();
		} else {
			ml = (ModelLoader)pcl.loadClass("org.eclipse.m2m.atl.drivers.emf4atl.EMFModelLoader").newInstance();
		}
		try {
			ml.addInjector("ebnf", pcl.loadClass("org.eclipse.m2m.atl.engine.injectors.ebnf.EBNFInjector"));
			ml.addInjector("ebnf2", pcl.loadClass("org.eclipse.m2m.atl.engine.injectors.ebnf.EBNFInjector2"));
		} catch(Exception e) {
		}
		try {
			ml.addExtractor("ebnf", pcl.loadClass("org.eclipse.m2m.atl.engine.extractors.ebnf.EBNFExtractor"));
		} catch(Exception e) {
		}
		try {
			ml.addInjector("bin", pcl.loadClass("org.eclipse.m2m.atl.engine.injectors.bin.BINInjector"));
		} catch(Exception e) {
		}
		Map models = new HashMap();
		ASMModel MOF = ml.getMOF();
		models.put("MOF", MOF);
		loadModels("preload", params, models, ml);
		ASMModel M = loadModels("source", params, models, ml);
		String target = (String)params.get("target");
		ml.save(M, target);
		long end = new Date().getTime();
		System.out.println("Execution took " + ((end - start) / 1000.) + "s.");
	}

	public static void realMain(String args[], PluginClassLoader pcl) throws Exception {
		System.out.println("ATL 0.2 Projector");
		System.out.println();
		long start = new Date().getTime();
		Map params = parseCommandLine(args);
		String plugins = (String)params.get("plugins");
		if(plugins != null) {
			String ss[] = plugins.split(",");
			for(Iterator i = Arrays.asList(ss).iterator() ; i.hasNext() ; ) {
				String plg = (String)i.next();
				System.out.println("Loading plugin: " + plg);
				pcl.addLocation(plg);
			}
		}
		String modelLoaderName = (String)params.get("ModelLoader");
		if(modelLoaderName == null)
			modelLoaderName = "MDR";
		ModelLoader ml = null;
		if(modelLoaderName.equals("MDR")) {
			ml = (ModelLoader)pcl.loadClass("org.eclipse.m2m.atl.drivers.mdr4atl.MDRModelLoader").newInstance();
		} else {
			ml = (ModelLoader)pcl.loadClass("org.eclipse.m2m.atl.drivers.emf4atl.EMFModelLoader").newInstance();
		}
		try {
			ml.addInjector("ebnf", pcl.loadClass("org.atl.engine.injectors.ebnf.EBNFInjector"));
			ml.addInjector("ebnf2", pcl.loadClass("org.atl.engine.injectors.ebnf.EBNFInjector2"));
		} catch(Exception e) {
		}
		try {
			ml.addExtractor("ebnf", pcl.loadClass("org.atl.engine.extractors.ebnf.EBNFExtractor"));
		} catch(Exception e) {
		}
		try {
			ml.addInjector("bin", pcl.loadClass("org.atl.engine.injectors.bin.BINInjector"));
		} catch(Exception e) {
		}
		Map models = new HashMap();
		ASMModel MOF = ml.getMOF();
		models.put("MOF", MOF);
		loadModels("preload", params, models, ml);
		ASMModel M = loadModels("source", params, models, ml);
		String target = (String)params.get("target");
		ml.save(M, target);
		long end = new Date().getTime();
		System.out.println("Execution took " + ((end - start) / 1000.) + "s.");
	}
