Guest User

blakeman8192

a guest
Apr 13th, 2010
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.PrintWriter;
  3.  
  4. import com.sun.tools.javac.Main;
  5.  
  6. public class JavacPP
  7. {
  8.  
  9.     private static int classCount = 0;
  10.  
  11.     static
  12.     {
  13.         Logger l = new Logger(System.out);
  14.         System.setOut(l);
  15.         System.setErr(l);
  16.     }
  17.  
  18.     public static void main(String[] args)
  19.     {
  20.         System.out.println("starting javac++");
  21.         System.out.println("by blakeman8192\n");
  22.         if (args.length != 3)
  23.         {
  24.             System.err.println("invalid arguments!");
  25.             System.err.println("usage: <srcdir> <libdir> <destdir>");
  26.             System.err.println("where <srcdir> is the source directory, and <destdir> is the destination directory.");
  27.             return;
  28.         }
  29.  
  30.         File srcDir = new File(args[0]);
  31.         File libDir = new File(args[1]);
  32.         File outDir = new File(args[2]);
  33.        
  34.         if (!srcDir.exists())
  35.         {
  36.             System.err.println("source directory " + srcDir.getPath() + " does not exist!");
  37.             return;
  38.         }
  39.        
  40.         if (!outDir.exists())
  41.         {
  42.             System.out.println("creating output folder: " + outDir.getPath());
  43.             outDir.mkdir();
  44.         }
  45.  
  46.         long startTime = System.currentTimeMillis();
  47.         String sourcePath = buildSourcepath(srcDir);
  48.         compile(sourcePath, srcDir, libDir, outDir);
  49.         long elapsedTime = System.currentTimeMillis() - startTime;
  50.  
  51.         System.out.println("compiled " + classCount + " classes in " + elapsedTime + "ms");
  52.         System.out.println("compilation complete.");
  53.     }
  54.  
  55.     private static void compile(String sourcePath, File srcDir, File libDir, File outDir)
  56.     {
  57.         String args = "-d " + outDir.getPath() + " -cp " + buildLibFiles(libDir) + " -sourcepath " + sourcePath + " " + buildSourceFiles(srcDir);
  58.         System.out.println("build arguments: \n\t" + args);
  59.         System.out.println("compiling...");
  60.         System.out.println("----------------------------------------");
  61.         Main.compile(args.split(" "), new PrintWriter(System.out));
  62.     }
  63.  
  64.     private static String buildSourcepath(File srcDir)
  65.     {
  66.         StringBuilder bldr = new StringBuilder();
  67.         bldr.append(srcDir.getPath() + ";");
  68.         for (File child : srcDir.listFiles())
  69.         {
  70.             if (child.isDirectory())
  71.             {
  72.                 bldr.append(buildSourcepath(child));
  73.             }
  74.         }
  75.         return bldr.toString();
  76.     }
  77.  
  78.     private static String buildLibFiles(File libDir)
  79.     {
  80.         if (!libDir.exists())
  81.             return ".";
  82.         StringBuilder bldr = new StringBuilder();
  83.         bldr.append(libDir.getPath() + ";");
  84.         for (File child : libDir.listFiles())
  85.         {
  86.             if (child.getName().endsWith(".jar"))
  87.             {
  88.                 bldr.append(child.getPath() + ";");
  89.             }
  90.         }
  91.         return bldr.toString();
  92.     }
  93.  
  94.     private static String buildSourceFiles(File srcDir)
  95.     {
  96.         StringBuilder bldr = new StringBuilder();
  97.         for (File child : srcDir.listFiles())
  98.         {
  99.             if (child.isDirectory())
  100.             {
  101.                 bldr.append(buildSourceFiles(child));
  102.             } else
  103.             {
  104.                 classCount++;
  105.                 bldr.append(child.getPath() + " ");
  106.             }
  107.         }
  108.         return bldr.toString();
  109.     }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment