如何在Maven项目中通过JavaCompiler API引入内部依赖?
问题根因
你当前的代码存在两个核心配置错误导致依赖加载失败:
- 你错误地将单个
.class文件的全路径传给了-cp参数,classpath需要指定包层级的根目录,而非单个类文件路径,你已经配置了Gson编译输出的根目录/Users/XXXX/Desktop/defects4j/project_repos/gson/gson/target/classes/,无需再额外指定单个类路径 - 你错误地把依赖类名放到了
JavaCompiler.CompilationTask的第6个参数位置,这个参数的作用是指定需要做注解处理的类名,而非声明编译依赖,无注解处理需求时直接传null即可
修正后代码
JavaFileObject file = new JavaSourceFromString(this.className, writer.toString()); Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(file); // 编译选项只保留必要的classpath、输出目录配置,不要重复传-cp List<String> compileOptions = Arrays.asList( "-classpath", "/Users/XXXX/Desktop/defects4j/project_repos/gson/gson/target/classes/", "-d", outputDir ); // 注解处理类参数传null,不要填依赖类名 JavaCompiler.CompilationTask task = compiler.getTask( null, null, diagnostics, compileOptions, null, compilationUnits ); boolean success = task.call();
多依赖场景补充说明
如果需要引入多个外部依赖,直接把所有依赖的jar包路径、或者其他模块的编译输出根目录用系统路径分隔符拼接后传给-classpath参数即可:
- Windows系统用分号
;分隔 - Linux/macOS系统用冒号
:分隔
内容的提问来源于stack exchange,提问作者OBezzad
相关产品推荐
相关产品推荐

