java - 使用 Jar 从文件创建类

标签 java eclipse compiler-construction build jar

今天我问了很多关于 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/

相关文章:

java - 获取html中动态表的行id

compiler-construction - LR(1) 但不是 LL(1) 的语法

java - 为什么我无法查看 "JCE"的源代码

java - 重新发布不起作用(静态资源)

c++ - 使用eclipse的c++中的简单hello world获取错误bin bash权限被拒绝

c++ - 从<iostream.h> 更改为<iostream> 会导致缓冲区溢出吗?

assembly - 是什么使得 x = 2 与 MOV X , 2 机器无关?

java - 如何提高 GZIP 性能

java - 设计循环的更好方法

java - 优化 Hibernate 实体保存?