如何用jci编译java类?

如何用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

我用这个:

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 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的“当前目录”不是包含源路径名中使用的“测试”目录的目录
尝试的事项:

  • 使用源文件的绝对路径名,只是为了证明您可以运行编译器
  • 打印出
    System.getProperty(“user.dir”)
    的值。。。它应该与JVM的当前目录匹配。在此基础上,找出源文件的相对路径名应该是什么

输出清楚地告诉您,编译器无法找到具有您提供的路径名的源文件。两个可能的原因浮现在脑海中:

  • 您提供了错误的源文件路径名,或者
  • JVM的“当前目录”不是包含源路径名中使用的“测试”目录的目录
尝试的事项:

  • 使用源文件的绝对路径名,只是为了证明您可以运行编译器
  • 打印出
    System.getProperty(“user.dir”)
    的值。。。它应该与JVM的当前目录匹配。在此基础上,找出源文件的相对路径名应该是什么

现在,相对于当前工作目录,文件
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。