我正在开发一个 Maven 插件,它将生成代码并编译它。当我通过 Eclipse 中的测试使用插件源代码时,一切正常。甚至无需在 JavaCompiler ( Javax.tools ) 中设置类路径。
但是,当我将它打包并作为 Maven 插件运行时。生成代码的编译失败,无法找到 Jackson 注释等引用的类。
我试过了
- 尝试在指向本地 maven 存储库的 JavaCompiler 上设置类路径选项,它仍然找不到必要的类。
- 将类路径设置为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 可以找到必要的依赖项来编译生成的代码。
任何帮助将不胜感激。