У меня есть много .java
файлов, которые необходимо импортировать другой файл .java
...Как скомпилировать .java с зависимостями от времени выполнения?
что-то вроде этого:
import package.c;
public class A {
// do whatever that needs package.c
}
Но у меня только package.c.java
.
Когда я пытаюсь скомпилировать с помощью Java Compiler или что-нибудь еще, что я знаю, я всегда получал эти ошибки
error: package <-package-> does not exist
Или что-то вроде:
error: cannot find symbol
Я не могу скомпилировать A.java
потому необходимость C.class
, которые не могут быть скомпилированы, требуют другого, кто-то знает, что мне делать?
Все нормально, когда .java
не нуждается в зависимостях, в этом случае Java Compiler преуспевает.
Может быть, ссылка GetStarted может решить мою проблему, но я не могу найти способ сделать это.
[EDIT] То есть мой код компилятора:
File sourceDir = new File(source);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, Locale.getDefault(), null);
List<JavaFileObject> javaObjects = scanRecursivelyForJavaObjects(sourceDir, fileManager);
System.out.println(javaObjects.size());
if (javaObjects.size() == 0) {
throw new CompilationError("There are no source files to compile in " + sourceDir.getAbsolutePath());
}
String[] compileOptions = new String[]{"-d", sourceDir.getAbsolutePath()};
Iterable<String> compilationOptions = Arrays.asList(compileOptions);
CompilationTask compilerTask = compiler.getTask(null, fileManager, diagnostics, compilationOptions, null, javaObjects);
if (!compilerTask.call()) {
for (Diagnostic<?> diagnostic : diagnostics.getDiagnostics()) {
System.err.format("Error on line %d in %s", diagnostic.getLineNumber(), diagnostic);
}
throw new CompilationError("Could not compile project");
}
, где я даю путь и найти все файлы .java там, добавив их в список и пытается собрать все одновременно.
показать командную строку, которую вы используете для компиляции кода. – MeBigFatGuy
Скомпилировать все файлы одновременно. – chrylis
Вам нужно будет иметь зависимости, доступные во время компиляции в пути к классам, либо как источник, скомпилированный как файлы классов, либо упакованные в библиотеку Jar. – MadProgrammer