2

Mavenがコンパイルタスクを実行する方法を知っている人はいますか?Antがクラスパスで「tools.jar」を検索し、コンパイラのエントリポイントとして「com.sun.tools.javac.Main」を使用していることを知っています。

Mavenはどうですか?ありがとう。

4

2 に答える 2

1

maven-compiler-pluginは、次のようにこれを制御します。-

Mavenコンパイラプラグイン コンパイラプラグインは、プロジェクトのソースをコンパイルするために使用されます。デフォルトのコンパイラはjavacであり、Javaソースのコンパイルに使用されます。また、現在、Mavenを実行しているJDKとは関係なく、デフォルトのソース設定は1.5で、デフォルトのターゲット設定は1.5であることに注意してください。これらのデフォルトを変更する場合は、Javaコンパイラの-sourceと-targetの設定で説明されているようにsourceとtargetを設定する必要があります。

これがお役に立てば幸いです。

于 2013-03-06T00:34:15.540 に答える
1

ちなみに、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
于 2013-03-06T12:45:16.137 に答える