2

有人知道 Maven 是如何完成它的编译任务的吗?我知道 Ant 在类路径中查找“tools.jar”并使用“com.sun.tools.javac.Main”作为编译器的入口点。

马文呢?谢谢。

4

2 回答 2

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 回答
1

maven-compiler-plugin对此进行控制,如下所述:-

Maven Compiler Plugin Compiler Plugin 用于编译项目的源代码。默认编译器是 javac,用于编译 Java 源代码。另请注意,目前默认源设置为 1.5,默认目标设置为 1.5,与运行 Maven 的 JDK 无关。如果要更改这些默认值,则应按照设置 Java 编译器的 -source 和 -target 中所述设置源和目标。

我希望这可能会有所帮助。

于 2013-03-06T00:34:15.540 回答