Ich habe eine Menge von .java
Dateien, die eine andere .java
Datei ...Wie kompiliere .java mit Abhängigkeiten zur Laufzeit?
So etwas importieren müssen:
import package.c;
public class A {
// do whatever that needs package.c
}
Aber ich nur die package.c.java
haben.
error: cannot find symbol
ich nicht kompilieren kann A.java
weil Bedarf:
Wenn ich versuche, mit Java-Compiler oder irgendetwas anderes zu kompilieren, was ich weiß, ich diese Fehler
error: package <-package-> does not exist
Oder so etwas wie immer bekam C.class
das kann nicht kompiliert werden, weil ich ein anderes brauche, jemand weiß, was soll ich tun?
Alles ist in Ordnung, wenn die .java
Abhängigkeiten nicht benötigt, in diesen Fällen Java Compiler gut tun.
Vielleicht GetStarted Link könnte mein Problem lösen, aber ich kann keinen Weg finden, dies zu tun.
[EDIT] Das ist mein Compiler Code:
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");
}
, wo ich einen Weg geben und alle .java-Dateien in dort finden, sie in einer Liste hinzufügen und versuchen, alle zur gleichen Zeit zu kompilieren.
zeigen Sie die Befehlszeile, die Sie verwenden, um Ihren Code zu kompilieren – MeBigFatGuy
Kompilieren Sie alle Dateien gleichzeitig? – chrylis
Sie müssen die Abhängigkeiten zur Kompilierzeit im Klassenpfad verfügbar haben, entweder als Quelle, kompiliert als Klassendateien oder verpackt in einer Jar-Bibliothek – MadProgrammer