私は...このようなランタイムに依存する.javaをコンパイルするには?
何か別の.java
ファイルをインポートする必要が.java
たくさんのファイルを持っている:
import package.c;
public class A {
// do whatever that needs package.c
}
をしかし、私は唯一のpackage.c.java
を持っています。
私はJavaコンパイラや、私が知っている何か他のものを使用してコンパイルしようとすると、私は常にこれらのエラー
error: package <-package-> does not exist
かのようなものだ:私は必要があるためA.java
をコンパイルすることはできません
error: cannot find symbol
をC.class
コンパイルできないと別のものが必要になることがあります。
.java
が依存関係を必要としない場合はすべて問題ありません。これらの場合、Javaコンパイラはうまく動作します。
GetStartedGetStartedリンクが私の問題を解決する可能性がありますが、これを行う方法が見つかりません。
私のコンパイラのコードである[EDIT]:
私はパスを与えると、リストにそれらを追加すると同時に、すべてをコンパイルしようと、そこにすべての.javaファイルを見つける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");
}
。 mainllyこのhttps://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html
:
JavaCompiler.CompilationTask getTask(アウトライター、 JavaFileManagerファイルマネージャ、 DiagnosticListener diagnosticListener、 反復処理可能なオプション、 反復処理可能なクラス、 反復処理可能compilationUnits
コードをコンパイルするために使用するコマンドラインを表示 – MeBigFatGuy
同時にすべてのファイルをコンパイルしますか? – chrylis
コンパイル時にクラスパスで依存関係を利用できるようにする必要があります。ソースとして、クラスファイルとしてコンパイルするか、Jarライブラリにパッケージ化します。 – MadProgrammer