Mavenがコンパイルタスクを実行する方法を知っている人はいますか?Antがクラスパスで「tools.jar」を検索し、コンパイラのエントリポイントとして「com.sun.tools.javac.Main」を使用していることを知っています。
Mavenはどうですか?ありがとう。
maven-compiler-pluginは、次のようにこれを制御します。-
Mavenコンパイラプラグイン コンパイラプラグインは、プロジェクトのソースをコンパイルするために使用されます。デフォルトのコンパイラはjavacであり、Javaソースのコンパイルに使用されます。また、現在、Mavenを実行しているJDKとは関係なく、デフォルトのソース設定は1.5で、デフォルトのターゲット設定は1.5であることに注意してください。これらのデフォルトを変更する場合は、Javaコンパイラの-sourceと-targetの設定で説明されているようにsourceとtargetを設定する必要があります。
これがお役に立てば幸いです。
ちなみに、mavenコンパイラプラグイン内で使用されるjavacコンパイラ(ターゲットコンパイラとして「javac」を指定した場合)は、次のようにロードされます。
まず、彼はクラスパスからロードしようとします。コンパイラが見つからない場合は、ディレクトリ「java.home」(システムプロパティ)内のlib/tools.jarからコンパイラをロードしようとします。多かれ少なかれ、ANTのようです。
これはorg.codehaus.plexus.compiler.javac.JavacCompilerからのスニペットです:
private static final String JAVAC_CLASSNAME = "com.sun.tools.javac.Main";
...
...
...
try {
return JavacCompiler.class.getClassLoader().loadClass( JavacCompiler.JAVAC_CLASSNAME );
} catch ( ClassNotFoundException ex ) {
// ok
}
final File toolsJar = new File( System.getProperty( "java.home" ), "../lib/tools.jar" );
if ( !toolsJar.exists() ) {
throw new CompilerException( "tools.jar not found: " + toolsJar );
}
// then, he load the class using a URLClassLoader