欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven项目在build时出现No compiler is provided in this environment的错误

程序员文章站 2024-02-07 22:49:16
...
近日有同事遇到在编译Maven项目时出现
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
的问题, 原以为这是个个例, 源于同事粗心, 配置环境出问题造成, 后到百度查看一下, 遇到这个问题的不在少数, 但是对问题的解释没有说到根源, 于是写下这篇博客供大家参阅, 如有纰漏, 还请指正.

错误代码节选:

[java] view plain copy
  1. [ERROR] COMPILATION ERROR :   
  2. [INFO] -------------------------------------------------------------  
  3. [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?  
  4. [INFO] 1 error  
  5. [INFO] -------------------------------------------------------------  
  6. [INFO] ------------------------------------------------------------------------  
  7. [INFO] BUILD FAILURE  
  8. [INFO] ------------------------------------------------------------------------  
  9. [INFO] Total time: 1.436 s  
  10. [INFO] Finished at: 2017-06-28T11:16:07+08:00  
  11. [INFO] Final Memory: 10M/151M  
  12. [INFO] ------------------------------------------------------------------------  
  13. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project manage: Compilation failure  
  14. [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?  
  15. Description Resource Path Location Type Java compiler level does not match the version of the in解决方法[ERROR] -> [Help 1]  

但是编写普通Java Project编译运行却是正常的,下图为只有输出语句的普通java类

Maven项目在build时出现No compiler is provided in this environment的错误

从上图中可以看出, java编译环境未jre1.7.0_17, 也就是说并没有配置成jdk目录, 然后看Eclipse-->Window-->preferences-->Java-->Installed JREs

Maven项目在build时出现No compiler is provided in this environment的错误

为了演示出效果, 在测试之前, 我已经将系统java环境配置成如上图所示路径, 并只保留该配置, 由下图可以看出, 该路径是我所安装的两个JDK版本中的一个JDK自带的jre运行环境. 使用该环境编译普通项目没有问题, 但为什么会在编译Maven项目时出错呢?

Maven项目在build时出现No compiler is provided in this environment的错误

我们看看Maven的环境是如何配置的:先找到Eclipse-->Window-->preferences-->Maven-->Installations

Maven项目在build时出现No compiler is provided in this environment的错误

在Maven配置中, 我并没有使用Eclipse自带的Maven插件, 而是重新配置的Maven环境, 然后再看Eclipse-->Window-->preferences-->Maven-->User Settings

Maven项目在build时出现No compiler is provided in this environment的错误

Maven设置使用的是Maven中conf文件夹下的settings.xml, 点击"open file" 在Eclipse中查看具体配置信息, 仅摘录与本错误信息相关的部分

[html] view plain copy
  1. <profiles>  
  2.   <!-- profile  
  3.    | Specifies a set of introductions to the build process, to be activated using one or more of the  
  4.    | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>  
  5.    | or the command line, profiles have to have an ID that is unique.  
  6.    |  
  7.    | An encouraged best practice for profile identification is to use a consistent naming convention  
  8.    | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.  
  9.    | This will make it more intuitive to understand what the set of introduced profiles is attempting  
  10.    | to accomplish, particularly when you only have a list of profile id's for debug.  
  11.    |  
  12.    | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.-->  
  13.     
  14.   <profile>  
  15.     <id>jdk-1.7</id>  
  16.     <activation>  
  17.         <activeByDefault>true</activeByDefault>  
  18.         <jdk>1.7</jdk>  
  19.     </activation>  
  20.     <properties>  
  21.     <maven.compiler.source>1.7</maven.compiler.source>  
  22.     <maven.compiler.target>1.7</maven.compiler.target>  
  23.     <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>  
  24. </properties>  
  25.   </profile>  
  26. </profiles>  

中间具体信息的理解, 可以参见 冰河winner 的博客. 也就是说, 根据上面的配置, 我们需要指定一个符合配置的JDK环境, 这是我们之前在Eclipse-->Window-->preferences-->Java-->Installed JREs下的配置就不行了, 而需要指定一个JDK目录, 例如我的JDK安装目录下的jdk1.7.0_17, 这也是这个错误出现的罪魁祸首. 不过对于Java开发者来说, Installed JREs中使用jdk目录而不适用jre目录也是最好的选择.

Maven项目在build时出现No compiler is provided in this environment的错误

步骤:

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

Maven项目在build时出现No compiler is provided in this environment的错误

然后再编译运行项目即可.

——————————————————————————————————————————————————————

Description Resource Path Location Type Java compiler level does not match the version of the in解决方法

今天使用maven的时候报这个错误 
Maven项目在build时出现No compiler is provided in this environment的错误

然后在网上查了,是jdk的版本不匹配, 
可以修改如下几个地方

解决方法 1:

我使用的jdk是1.8

windows—proferences—java–compiler设置jdk为1.8

windows—proferences—java–Installed JREs设置jdk为1.8

点击项目右键–properties—java Compiler 设置jdk为1.8

点击项目右键–properties—eclipse—project Facets设置java为1.8

点击项目右键–properties—eclipse—project Facets设置Dynamic Web Module 为3.1(这是你在web.xml配置的servlet版本)

点击项目右键–Maven—update project 错误应该可以消除

如果还是不行你就在pom.xml里面的

<plugins>
     <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>2.0.2</version>  
            <configuration>  
                <source>1.8</source>  
                <target>1.8</target>  
            </configuration>  
        </plugin>  
    </plugins>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这样就可以解决错误了

解决方法 2:修改安装目录中的..\apache-maven-3.3.9\conf中的settings.xml中修改jdk版本 
在profiles节点中添加

<profile>  
    <id>jdk-1.8</id>  
     <activation>  
          <activeByDefault>true</activeByDefault>  
          <jdk>1.8</jdk>  
      </activation>  
<properties>  
<maven.compiler.source>1.8</maven.compiler.source>  
<maven.compiler.target>1.8</maven.compiler.target>  
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
</properties>  
</profile>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果还是不行就到项目存放的地方我的是F:\eclipse\workspace\seckill.settings修改org.eclipse.wst.common.project.facet.core.xml这个文件

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="jst.web" version="3.1"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="java" version="1.8"/>
</faceted-project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

修改 installed facet=”jst.web” version=”3.1”/为3.1 
installed facet=”java” version=”1.8”/>为1.8

这样就OK了