Maven错误:也许你在运行JRE而不是JDK?

83

我以前从未使用过Maven,现在我正在按照这里的说明进行操作。当我运行命令时:

mvn integration-test -Pamp-to-war

它最初下载了许多依赖项,最终显示如下:

COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error

我正在使用Ubuntu 13.04操作系统。

如果你有任何需要我告诉你的,请让我知道。谢谢。

编辑

当我执行echo $JAVA_HOME命令时,会得到/usr/lib/jvm/java-7-openjdk-i386/的输出。

当我执行mvn -version命令时,会得到:

Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-i386/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.8.0-26-generic", arch: "i386", family: "unix"

另外,我发现有人遇到了这个问题。但我不确定如何解决所指定的解决方案?

进一步编辑。

kraken@kraken-Inspiron-1545:/usr/lib/jvm/java-7-openjdk-i386$ ls -l
total 12
drwxr-xr-x 2 root root 4096 Sep  9 10:44 bin
lrwxrwxrwx 1 root root   41 Jul  4  2013 docs -> ../../../share/doc/openjdk-7-jre-    headless
drwxr-xr-x 5 root root 4096 Oct 13  2013 jre
drwxr-xr-x 4 root root 4096 Oct 13  2013 man

2
你是否安装了JRE而不是JDK? - Zavior
我已经安装了JDK。当我执行 echo $JAVA_HOME 命令时,输出的结果是 /usr/lib/jvm/java-7-openjdk-i386/ - Kraken
2
Java的安装路径为:/usr/lib/jvm/java-7-openjdk-i386/jre,以jre结尾,以jdk开头,嗯 :P - Zavior
如果你执行 which javac 命令,你会得到什么结果? - Zavior
@Zavior,我已经附上了问题的链接,详细说明了问题。但我不确定那里所推荐的解决方案是什么。 - Kraken
显示剩余4条评论
24个回答

178

我遇到了使用Java 8(Ubuntu 16.04)时相同的问题,尝试使用mvn命令行进行编译。

我验证了我的$JAVA_HOMEjava -versionmvn -version。一切似乎都指向/usr/lib/jvm/java-8-openjdk-amd64,看起来没有问题。

似乎java-8-openjdk-amd64并没有完全安装默认只包含JRE(尽管其名称为"jdk")。

重新安装JDK解决了问题。

sudo apt-get install openjdk-8-jdk

然后,一些新文件和新文件夹被添加到/usr/lib/jvm/java-8-openjdk-amd64,然后mvn就能够再次编译了。


2
我想这本质上与被接受的答案相同 - 如果没有 JDK,你也不会有 tools.jar。 - eis
3
你真是个天才。谢谢你。我本以为我已经安装了jdk,但你说得对。这个问题确实很奇怪,跟amd64的Java有关:/ - zolty13
2
运行javac -version应该可以确认这一点,因为它不包含在JDK中。 - Little Helper
这个问题的最终解决方案。这个诀窍让人头疼:D - Neo Pham
这个技巧解决了我的问题。 - ysk
太好了,现在已排序。 - Jose Mhlanga

46

显然,我的$JAVA_HOME目录下的lib文件夹需要tools.jar文件。我没有lib文件夹,所以我使用命令重新安装了jdk。

apt-get install openjdk-7-jdk openjdk-7-doc openjdk-7-jre-lib

此外,这个链接可能会对一些人有所帮助。


24

这是因为运行的是jre而不是jdk,要安装jdk,请按照以下步骤操作

在Amazon Linux/Redhat中安装Java 8

--> yum search java | grep openjdk

--> yum install java-1.8.0-openjdk-headless.x86_64

--> yum install java-1.8.0-openjdk-devel.x86_64

--> update-alternatives --config java #选择java 1.8并按1

--> update-alternatives --config javac #选择java 1.8并按2

谢谢


是的,我的情况下也只安装了JRE。我们还需要安装JDK。 - Aswin Prasad
在RHEL 7.5上,我安装了java-1.8.0-openjdk,但这并不包括JAVAC编译器,所以根据您提供的信息,我另外安装了java-1.8.0-openjdk-devel.x86_64,现在我有了JAVAC编译器。如果它是一个JRE,它应该被标记为这样。这是彻头彻尾的胡说八道。java-1.8.0-openjdk不是一个JDK。应该称为java-1.8.0-openjdk-jre。 - barrypicker

10

问题描述 = 在此环境中没有提供编译器。也许你正在运行JRE而不是JDK?

解决方法

请按照以下方式设置环境变量以解决问题:

变量名:JAVA_HOME

变量值:C:\Program Files\Java\jdk1.8.0_202

变量名:M2_HOME

变量值:C:\Program Files\apache-maven-3.6.0

此外,请在“系统变量”中添加Java和maven路径,如下所示:

  1. C:\Program Files\Java\jdk1.8.0_202\bin
  2. C:\Program Files\apache-maven-3.6.0\bin

7
当JAVA_HOME未正确设置时,我会收到这个错误。
我尝试了这个命令。
$ /usr/libexec/java_home -V

这将提供3个虚拟机。

Matching Java Virtual Machines (3):
1.8.291.10 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_291 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
1.8.0_181 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home

在这种情况下,需要特定的版本。
这个。
$ /usr/libexec/java_home -v1.8
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

与...不同

$ /usr/libexec/java_home -v1.8.0
/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home

因此解决方案是在 ~/.bash_profile 中设置:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0`

7
对我来说,它的工作方式如下。请查看JAVA_HOME环境变量,看它是否指向JRE或JDK。如果它指向JRE,你将会遇到“也许你正在运行JRE而不是JDK”的问题。如果是这样,请将路径更改为JDK。按照此修改,它对我很有效。JAVA_HOME C:\Program Files\Java\jdk1.8.0_31。

5

我正在使用 CentOS 操作系统,当执行带有目标参数 installmvn 命令时遇到了同样的错误。在进行一些搜索后,我找到了解决方案,需要运行以下命令:

sudo yum install java-1.8.0-openjdk-devel


5

在设置位置上添加更多细节。主要原因是环境变量中的JAVA_HOME设置应该指向正确的JDK位置。

  1. 检查系统 -> 高级系统设置
  2. 点击环境变量
  3. 添加变量JAVA_HOME -> "C:\Program Files\Java\jdk1.8.0_141;"
  4. 编辑"path" -> 将%JAVA_HOME%;追加到现有文本中。

4
请在pom.xml中添加以下配置。
<project ...>
    ...
    <build>
        ...
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <fork>true</fork>
                    <executable>C:\Program Files\Java\jdk1.7.0_79\bin\javac</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>

3

检查 /usr/bin 中是否有 "javac"。如果没有,则您已安装了 JRE,并且需要安装 jdk dev 版本,例如 "java-1.8.0-openjdk-devel.x86_64"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接