2013-04-24 19 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(); 
相关问题