使用代码编译包含java类和文本文件的目录

rkue9o1l  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(273)

我已经四处寻找了几天,试图找到一种方法来编译一个不仅仅包含java类的完整目录。我不知道如何在编译过程中添加文本文件和依赖项。有人知道怎么做吗?我知道javacompiler是个东西,但我不能让它这么做。我真的很感激如果有人能寄给我一些样本代码使用任何能够做我想要的。

insrf1ej

insrf1ej1#

如果您只想编译目录/文件夹中的java文件,可以打开终端,转到特定的文件夹并运行

javac *.java

如果您想从java应用程序执行此操作,可以使用runtime类从java程序执行操作系统命令。
例如,您可以创建一个bash脚本或.bat文件,将所有命令放在那里,然后调用

Runtime run = Runtime.getRuntime();
Process process=runtime.exec("Compile.bat");

还可以创建pom.xml,并使用maven构建项目(通过从应用程序中调用maven)

yqkkidmi

yqkkidmi2#

所以,我已经开始了

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null, main.getAbsolutePath(), events.getAbsolutePath(), commands.getAbsolutePath());
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
fileManager.setLocation(StandardLocation.CLASS_PATH, Collections.singletonList(dependencyJar));
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList(main.getAbsolutePath(), class2.getAbsolutePath(), class3.getAbsolutePath()));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits);
boolean success = task.call();
fileManager.close();
System.out.println(result);

应该管用,但不行。在编译时,它抛出了一堆关于“import…”的错误,好像我没有添加依赖项一样。我觉得我很接近,但我找不到问题。有人能告诉我我做错了什么吗?拜托

相关问题