为什么javac在使用maven-compiler-plugin编译时仍然需要

时间:2018-02-10 15:34:57

标签: java maven javac maven-compiler-plugin

我读到了maven-compiler-plugin。在链接页面上,它告诉:

  

目前,编译器插件与javac编译器工件捆绑在一起,其中artifactId plexus-compiler-javac可以看作是编译器插件POM中声明的依赖项之一

根据我的理解,我们不再需要本地javac了,比如在我的本地操作系统上,仅仅JRE而不是JDK就足够了。

我确实尝试删除JDK并仅在我的本地系统上安装了JRE。但是,当我尝试使用命令maven使用mvn clean compile进行编译时,出现了错误消息 -

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

有人可以解释为什么会这样吗?可能我的理解是错的?

2 个答案:

答案 0 :(得分:2)

来自the documentation

  

Plexus编译器

     

Plexus编译器是使用不同编译器的Plexus组件   通过统一的API。

     

与此插件的名称相反,Compiler Plugin不会自行编译项目的来源。

因此,plexus-compiler-javac工件必须被视为要编译的wrapper 没有声明它包含javac程序。

确切地说,从3.0版本开始,默认情况下不会直接javac使用javax.tools(更具体地说是javax.tools.JavaCompiler)。
maven-compiler-plugin文档确实说明了:

  

从3.0开始,默认编译器是 javax.tools.JavaCompiler (如果你   正在使用java 1.6)并用于编译Java源代码。如果你想   要使用javac强制插件,您必须配置插件选项   forceJavacCompilerUse

你必须明白,Maven核心插件不会重新发明轮子并猜测你需要什么 要编译java类,您需要一个Java编译器,通常您希望能够确保使用特定的Java编译器作为操作系统和Java版本。
所以maven编译器插件需要并使用JDK。

答案 1 :(得分:1)

Maven不是java编译器。 Maven为您运行java编译器并配置所有路径。

运行mvn -X compile时,您将看到编译器的详细信息。

总之:你需要安装一个java编译器来编译java - 即使maven为你启动编译器。