使用Jar从File创建类

时间:2012-03-12 17:47:20

标签: java eclipse compiler-construction build jar

今天我问了很多关于罐子和罐子的问题。 JavaCompiler进行。 因为我无法实现目标,所以现在我会问整个问题:

我想要一个ProgramOne.jar,它从文件中编译一个类,然后加载这个类。

不知何故,我无法用Eclipse中的方法实现这一点(ProgramOne没有打包到Jar中)。

所以在eclipse中工作的方法是:

File fRun = new File("someFile.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"\\bin\\"} );
Iterable<? extends JavaFileObject> compUnits =  fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();           

if(compRes == true){
    System.out.println("Compilation has succeeded");
    fileManager.close();
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    Class<?> compiledClass = cl.loadClass(someFile);
    cRun = compiledClass;
}else{
    System.out.println("Compilation error");
    fileManager.close();
    throw new Exception("Compilation Error");
}

这将在文件夹<...>/ProgramOne/bin中创建类文件,然后加载class

如何使用压缩的ProgramOne.jar实现这一目标?

1 个答案:

答案 0 :(得分:1)

如果我了解您要执行的操作,则需要以编程方式重新创建ProgramOne.jar文件。

所以:

java -jar ProgramOne.jar foo.java

1)ProgramOne.jar编译foo.java

2)ProgramOne.jar重组自身以包含foo.class

3)ProgramOne.jar执行foo.class

有关jar文件创建的一个示例,请参阅here

相关问题