/** * Mécanisme de compilation du fichier Jvs. * * @param program Le code à compiler * @return La valeur true si la compilation est ok, false sinon. */ public boolean doCompile(String program) { doStop(); // Traduction Jvs -> Java puis Java -> Class et chargement de la classe // si succès Jvs2Java jvs2java = new Jvs2Java(); if (getProglet() != null) { jvs2java.setProgletTranslator(getProglet().getTranslator()); jvs2java.setProgletPackageName( getProglet().hasFunctions() ? "org.javascool.proglets." + getProglet().getName() : null); } String javaCode = jvs2java.translate(program); // Creation d'un répertoire temporaire String javaFile; try { File buildDir = FileManager.createTempDir("javac"); javaFile = buildDir + File.separator + jvs2java.getClassName() + ".java"; FileManager.save(javaFile, javaCode); // Si il y a un problème avec le répertoire temporaire on se rabat // sur le répertoire local } catch (Exception e1) { try { javaFile = new File(jvs2java.getClassName() + ".java").getAbsolutePath(); System.err.println("Sauvegarde locale du fichier : " + javaFile); FileManager.save(javaFile, javaCode); // Sinon on signale le problème à l'utilisateur } catch (Exception e2) { System.out.println( "Attention ! le répertoire '" + System.getProperty("user.dir") + "' ne peut être utilisé pour sauver des fichiers, \n il faut re-lancer javascool dans un répertoire de travail approprié."); return false; } } if (Java2Class.compile(javaFile)) { try { runnable = Java2Class.load(javaFile); return true; } catch (Exception e3) { System.out.println( "Attention ! il y a eu une action externe de netoyyage de fichiers temporraires ou le répertoire '" + new File(javaFile).getParent() + "' ne peut être utilisé pour sauver des fichiers, \n il faut re-lancer javascool dans un répertoire de travail approprié."); return false; } } else { runnable = null; return false; } }
/** @see #compile(String, String, String, boolean) */ public static boolean compile( String jarFile, String mainClass, String javaFiles[], boolean allErrors) { try { String buildDir = ".build"; JarManager.rmDir(new File(buildDir)); new File(buildDir).mkdirs(); JarManager.jarExtract(Core.javascoolJar(), buildDir, "org/javascool"); for (int i = 0; i < javaFiles.length; i++) { String file = javaFiles[i]; javaFiles[i] = buildDir + File.separator + file; JarManager.copyFiles(file, javaFiles[i]); } if (!Java2Class.compile(javaFiles, allErrors)) { return false; } String mfFile = buildDir + File.separator + "manifest.jmf"; Pml manifest = new Pml() .set("Main-Class", mainClass) .set("Implementation-URL", "http://javascool.gforge.inria.fr") .save(mfFile); JarManager.jarCreate(jarFile, mfFile, buildDir); JarManager.rmDir(new File(buildDir)); return true; } catch (IOException e) { throw new RuntimeException("Erreur d'entrées-sorties à la compilation : " + e); } }