今天我问了很多关于 Jars 和 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 实现这一点?
最佳答案
如果我明白您要做什么,您需要以编程方式重新创建 ProgramOne.jar
文件。
所以:
java -jar ProgramOne.jar foo.java
1)ProgramOne.jar编译foo.java
2) ProgramOne.jar 重新组装自身以包含 foo.class
3)ProgramOne.jar执行foo.class
参见here查看 jar 文件创建的示例。
关于java - 使用 Jar 从文件创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672135/