2013-04-24 27 views
0
public static int compileModifiedClass(String ModifiedFile) 
{ 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    int result = compiler.run(null, null, null, ModifiedFile); 
    System.out.println("Compile result code = " + result); 
    return result; 
} 

路徑爲ModifiedFile的路徑:d:\ ModifiedJavaFiles \ COM \例子\測試\我不能設置類文件,我通過代碼加在罐子

因此,類在這個文件夾中生成,並且Jar路徑是:D:\ test.jar

我想在jar中將這些類的路徑設置爲com/example/tests。

任何幫助真的不勝感激。

爲了添加信息,在編譯類之後,我從路徑中獲取類並調用updateZipFile方法來更新該jar。

classes = getClassesFromPath(ModifiedFilesPath, JarPath); 
         File jarFile = new File(JarPath); 
         JarUpdater jarUpdater = new JarUpdater(); 
         try 
         { 
          jarUpdater.updateZipFile(jarFile, classes); 
         } 
         catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 

public void updateZipFile(File zipFile, 
      File[] files) throws IOException { 
       // get a temp file 
     File tempFile = File.createTempFile(zipFile.getName(), null); 
       // delete it, otherwise you cannot rename your existing zip to it. 
     tempFile.delete(); 

     boolean renameOk=zipFile.renameTo(tempFile); 
     if (!renameOk) 
     { 
      throw new RuntimeException("could not rename the file "+zipFile.getAbsolutePath()+" to "+tempFile.getAbsolutePath()); 
     } 
     byte[] buf = new byte[1024]; 

     ZipInputStream zin = new ZipInputStream(new FileInputStream(tempFile)); 
     ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); 

     ZipEntry entry = zin.getNextEntry(); 
     while (entry != null) { 
      String name = entry.getName(); 
      boolean notInFiles = true; 
      for (File f : files) { 
       if (f.getName().equals(name)) { 
        notInFiles = false; 
        break; 
       } 
      } 
      if (notInFiles) { 
       // Add ZIP entry to output stream. 
       out.putNextEntry(new ZipEntry(name)); 
       // Transfer bytes from the ZIP file to the output file 
       int len; 
       while ((len = zin.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       } 
      } 
      entry = zin.getNextEntry(); 
     } 
     // Close the streams   
     zin.close(); 
     // Compress the files 
     for (int i = 0; i < files.length; i++) { 
      InputStream in = new FileInputStream(files[i]); 
      // Add ZIP entry to output stream. 
      out.putNextEntry(new ZipEntry(files[i].getName())); 
      // Transfer bytes from the file to the ZIP file 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
      // Complete the entry 
      out.closeEntry(); 
      in.close(); 
     } 
     // Complete the ZIP file 
     out.close(); 
     tempFile.delete(); 
    } 

回答

0
URL jar = jarFile.toURI().toURL(); 
URL dir = new URL("file:/D:/ModifiedJavaFiles/"); 
URL[] urls = { jar, dir }; 
URLClassLoader loader = new URLClassLoader(urls); 
Class<?> klazz = loader.loadClass("com.example.tests.MyTest"); 
loader.close(); 
相關問題