如何用jci编译java类?
我用这个: org.apache.commons.jci.compilers.JavacJavaCompiler 我有一门jci课程:如何用jci编译java类?,java,classloader,apache-commons-jci,Java,Classloader,Apache Commons Jci,我用这个: org.apache.commons.jci.compilers.JavacJavaCompiler 我有一门jci课程: public void compile() { sourceDir = new File("java"); sources = new String[] { "test/HelloWorld.java" }; target = new File("result"); JavacJavaCompilerSettings setti
public void compile() {
sourceDir = new File("java");
sources = new String[] { "test/HelloWorld.java" };
target = new File("result");
JavacJavaCompilerSettings settings = new JavacJavaCompilerSettings();
JavacJavaCompiler javacJavaCompiler = new JavacJavaCompiler(settings);
System.out.println("compile -> " + sources);
System.out.println("compile -> " + sourceDir);
System.out.println("compile -> " + target);
CompilationResult result = javacJavaCompiler.compile(sources,
new FileResourceReader(sourceDir),
new FileResourceStore(target));
for (CompilationProblem cp : result.getErrors()) {
System.out.println("compile -> " + cp.getStartLine());
System.out.println("compile -> " + cp.getMessage());
}
}
我的输出是:
compile -> 0
compile -> Failure executing javac, but could not parse the error: javac: file not found: test/HelloWorld.java
Usage: javac <options> <source files>
use -help for a list of possible options
编译->0
编译->执行javac失败,但无法分析错误:javac:file not found:test/HelloWorld.java
用法:javac
使用-help获取可能选项的列表
有些想法,ty。输出清楚地告诉您,编译器无法找到您提供的具有路径名的源文件。两个可能的原因浮现在脑海中:
- 您提供了错误的源文件路径名,或者
- JVM的“当前目录”不是包含源路径名中使用的“测试”目录的目录
- 使用源文件的绝对路径名,只是为了证明您可以运行编译器
- 打印出
的值。。。它应该与JVM的当前目录匹配。在此基础上,找出源文件的相对路径名应该是什么System.getProperty(“user.dir”)
- 您提供了错误的源文件路径名,或者
- JVM的“当前目录”不是包含源路径名中使用的“测试”目录的目录
- 使用源文件的绝对路径名,只是为了证明您可以运行编译器
- 打印出
的值。。。它应该与JVM的当前目录匹配。在此基础上,找出源文件的相对路径名应该是什么System.getProperty(“user.dir”)
test/HelloWorld.java
是否存在于java
目录中?可能输出'System.getProperty(“user.dir”),文件应该与此相关。是的,文件'test/HelloWorld.java'存在于'java'目录中。。。这是我的问题。。。源文件是路径相对(相对于sourceDir)或绝对路径的文件…现在,相对于当前工作目录,文件test/HelloWorld.java
是否存在于java
目录中?可能输出'System.getProperty(“user.dir”),文件应该与此相关。是的,文件'test/HelloWorld.java'存在于'java'目录中。。。这是我的问题。。。源文件是具有相对路径(相对于sourceDir)或绝对路径的文件…但是,我认为。。但是我的文件源是相对于“java”文件夹的。我想知道它的来源是相对的还是绝对的。然后我希望,我的包结构从测试开始,而不是从java/test开始——它们可以是相对的,也可以是绝对的。但是如果它们是相对的,那么它们必须是相对于JVM的当前目录的。。。不管发生了什么。(在你的情况下,似乎“java”必须是当前目录…那么你在运行应用程序之前是否“cd java”?)我理解。。那么,我将改变我的问题。。如何配置这些参数。。对于编译,不更改打包结构?。。我的输出结果是:result/[packages and classes]您无法配置JVM的当前目录,因此需要找出哪些路径与(真实的)当前目录相对,或者使用绝对路径名。或者,使用Java工具API来运行编译器,而不是Apache commons API。。但是我的文件源是相对于“java”文件夹的。我想知道它的来源是相对的还是绝对的。然后我希望,我的包结构从测试开始,而不是从java/test开始——它们可以是相对的,也可以是绝对的。但是如果它们是相对的,那么它们必须是相对于JVM的当前目录的。。。不管发生了什么。(在你的情况下,似乎“java”必须是当前目录…那么你在运行应用程序之前是否“cd java”?)我理解。。那么,我将改变我的问题。。如何配置这些参数。。对于编译,不更改打包结构?。。我的输出结果是:result/[packages and classes]您无法配置JVM的当前目录,因此需要找出哪些路径与(真实的)当前目录相对,或者使用绝对路径名。或者,使用Java工具API来运行编译器,而不是Apache commons API。