今天我问了很多关于罐子和罐子的问题。 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实现这一目标?
答案 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。