Exemple #1
0
 /** @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);
   }
 }
 /**
  * Copie un répertoire/fichier dans un autre en oubliant les svn.
  *
  * @param srcDir Dossier source.
  * @param dstDir Dossier cible.
  */
 public static void copyFiles(String srcDir, String dstDir) throws IOException {
   if (new File(srcDir).isDirectory()) {
     if (!new File(srcDir).getName().equals(".svn")) {
       for (String s : FileManager.list(srcDir)) {
         String d = dstDir + File.separator + new File(s).getAbsoluteFile().getName();
         JarManager.copyFiles(s, d);
       }
     }
   } else {
     new File(dstDir).getParentFile().mkdirs();
     JarManager.copyStream(new FileInputStream(srcDir), new FileOutputStream(dstDir));
   }
 }
  /**
   * Extrait une arborescence d'un jar.
   *
   * @param jarFile Jarre dont on extrait les fichiers.
   * @param destDir Dossier où on déploie les fichiers.
   * @param jarEntry Racine des sous-dossiers à extraire. Si null extrait tout les fichiers.
   */
  public static void jarExtract(String jarFile, String destDir, String jarEntry) {
    try {
      ProgletsBuilder.log(
          "Extract files from "
              + jarFile
              + " to "
              + destDir
              + ((!jarEntry.isEmpty()) ? " which start with " + jarEntry : ""),
          true);
      JarFile jf = new JarFile(jarFile);
      JarInputStream jip = new JarInputStream(new FileInputStream(jarFile));
      jf.entries();
      JarEntry je;
      while ((je = jip.getNextJarEntry()) != null) {
        if ((jarEntry.isEmpty() ? true : je.getName().startsWith(jarEntry))
            && !je.isDirectory()
            && !je.getName().contains("META-INF")) {
          File dest = new File(destDir + File.separator + je.getName());
          dest.getParentFile().mkdirs();
          JarManager.copyStream(jip, new FileOutputStream(dest));
        }
      }
      jip.close();

    } catch (Exception ex) {
      throw new IllegalStateException(ex);
    }
  }
 /**
  * Détruit récursivement un fichier ou répertoire. *
  *
  * <p>Irréversible: à utiliser avec la plus grande prudence.
  */
 public static void rmDir(File dir) {
   if (dir.isDirectory()) {
     for (File f : dir.listFiles()) {
       JarManager.rmDir(f);
     }
   }
   dir.delete();
 }
 // Ajoute un stream a un jar
 private static void copyFileToJar(
     File source, JarOutputStream target, File root, String[] jarEntries) throws IOException {
   // Teste si la source est dans les fichier à extraire
   if (jarEntries != null) {
     boolean skip = true;
     for (String jarEntry : jarEntries) {
       String entry = root.toString() + File.separator + jarEntry;
       skip &= !(entry.startsWith(source.toString()) | source.toString().startsWith(entry));
     }
     if (skip) return;
   }
   try {
     if (source.isDirectory()) {
       String name =
           source
               .getPath()
               .replace(root.getAbsolutePath() + File.separator, "")
               .replace(File.separator, "/");
       if (!name.isEmpty() && (!source.equals(root))) {
         if (!name.endsWith("/")) {
           name += "/";
         }
         JarEntry entry = new JarEntry(name);
         entry.setTime(source.lastModified());
         target.putNextEntry(entry);
         target.closeEntry();
       }
       for (File nestedFile : source.listFiles()) {
         JarManager.copyFileToJar(nestedFile, target, root, jarEntries);
       }
     } else {
       JarEntry entry =
           new JarEntry(
               source
                   .getPath()
                   .replace(root.getAbsolutePath() + File.separator, "")
                   .replace(File.separator, "/"));
       entry.setTime(source.lastModified());
       target.putNextEntry(entry);
       JarManager.copyStream(new BufferedInputStream(new FileInputStream(source)), target);
     }
   } catch (Throwable e) {
     e.printStackTrace(System.out);
     throw new IllegalStateException(e);
   }
 }
 /**
  * Crée un jar à partir d'une arborescence.
  *
  * @param jarFile Jar à construire. Elle est détruite avant d'être crée.
  * @param mfFile Fichier de manifeste (obligatoire).
  * @param srcDir Dossier source avec les fichiers à mettre en jarre.
  * @param jarEntries Racine des sous-dossiers à extraire. Si null extrait tout les fichiers.
  */
 public static void jarCreate(String jarFile, String mfFile, String srcDir, String[] jarEntries) {
   try {
     ProgletsBuilder.log("Création du jar " + jarFile, true);
     File parent = new File(jarFile).getParentFile();
     if (parent != null) {
       parent.mkdirs();
     }
     new File(jarFile).delete();
     srcDir = new File(srcDir).getCanonicalPath();
     Manifest manifest = new Manifest(new FileInputStream(mfFile));
     manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
     JarOutputStream target = new JarOutputStream(new FileOutputStream(jarFile), manifest);
     JarManager.copyFileToJar(new File(srcDir), target, new File(srcDir), jarEntries);
     target.close();
   } catch (Exception ex) {
     ex.printStackTrace();
     throw new RuntimeException(ex);
   }
 }
 /** @see #jarExtract(String, String, String) */
 public static void jarExtract(String jarFile, String destDir) {
   JarManager.jarExtract(jarFile, destDir, "");
 }
 /** @see #jarCreate(String, String, String, String[]) */
 public static void jarCreate(String jarFile, String mfFile, String srcDir) {
   JarManager.jarCreate(jarFile, mfFile, srcDir, null);
 }