1

我正在开发一个 Maven 插件,它将生成代码并编译它。当我通过 Eclipse 中的测试使用插件源代码时,一切正常。甚至无需在 JavaCompiler ( Javax.tools ) 中设置类路径。

但是,当我将它打包并作为 Maven 插件运行时。生成代码的编译失败,无法找到 Jackson 注释等引用的类。

我试过了

  1. 尝试在指向本地 maven 存储库的 JavaCompiler 上设置类路径选项,它仍然找不到必要的类。
  2. 将类路径设置为jackson注释jar和commons lang(我生成的代码需要它们),然后事情似乎可以正常工作。

工作代码:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
            StandardJavaFileManager fileManager = compiler
                    .getStandardFileManager(diagnostics, null, null);
            Iterable<? extends JavaFileObject> compilationUnits = fileManager
                    .getJavaFileObjects(classDirectory.listFiles());
            List<String> optionsList = new ArrayList<String>();

            System.setProperty("java.class.path", "/Users/vayipalayamchand/.m2/maven.repo:../..");
            optionsList.addAll(Arrays.asList("-classpath","/Users/vayipalayamchand/.m2/maven.repo/com/fasterxml/jackson/core/jackson-annotations/2.1.0/jackson-annotations-2.1.0.jar:/Users/vayipalayamchand/.m2/maven.repo/commons-lang/commons-lang/2.4/commons-lang-2.4.jar:../../:$CLASSPATH"));
            JavaCompiler.CompilationTask task = compiler.getTask(null,
                    fileManager, diagnostics, optionsList , null, compilationUnits);
            boolean isSuccess = task.call();
            fileManager.close();

使用 jar 方法的路径设置类路径的问题:

  • 它不干净。插件的用户需要指定这些 jar 的位置(甚至不将其视为一个选项。

有什么更好的方法可以确保我的 JavaCompiler 可以找到必要的依赖项来编译生成的代码。

任何帮助将不胜感激。

4

0 回答 0