Java版本在Maven更新后自动更改为Java 1.5


120

我正在使用eclipse作为IDE。当我右键单击该项目,然后单击maven update时,我的Java版本更改为1.5。这是我到目前为止所做的,我遵循了此处列出的所有步骤

http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires-java-1-6-or-newer-in-maven-projects/

  1. 我将“ Java构建路径”更改为“工作区默认jre 1.8.0_25”
  2. 然后将“ java编译器”更改为1.8
  3. 然后更改“ project facets“> java> 1.8
  4. 将pom.xml Java版本更改为1.8
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.3.v20140225</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

毕竟,当我单击“ Maven更新”时,我的Java版本会自动更改为1.5。同样在上述步骤中,前两步的版本也会自动更改为1.5。我怎样才能解决这个问题?

Answers:


222

打开pom.xml文件并在其上添加以下行:

<properties>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>

1.8当前JDK / JRE的Java版本在哪里。另一种方法是<build>maven-compile-pluginas中添加

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
</plugins>
</build>

编辑

如果您正在寻找一种使其能够与Java 9+版本一起使用的方法,请在此处查看@JDelorean的 答案,并且不要忘记也给他一个投票:)


4
我想我已经做了第二种方法,并且我也发布了代码。看不到您在该代码中
所做的

1
是的 当我回答时,您还没有发布代码。因此,添加我的答案的第一部分。的properties标签。如果您的POM已经有一个properties标签,只需在其中添加标签,它就可以正常工作。
Jorge Campos

@asdlfkjlkj日食是使用嵌入式Maven还是外部Maven安装?日食的另一个问题是指向JRE还是指向JDK?这是两个有关日食+专家的问题。
豪尔赫·坎波斯2015年

@JorgeCampos-我发布了一个新问题。您对此有任何想法吗?stackoverflow.com/questions/42855512/…

@JorgeCampos我在哪里找到maven-complier-plugin要添加的<build>?谢谢
梦のの梦

23

当我安装Java 9时遇到了相同的问题。我的项目将默认为J2SE-1.5执行环境。奇怪的是,Java 9合规性级别没有像以前的版本(即“ 1.8”)那样被引用,而是被称为“ 9”。所以我必须相应地提供我的属性和Maven编译器插件配置:

<properties>
    <maven.compiler.source>9</maven.compiler.source>
    <maven.compiler.target>9</maven.compiler.target>
</properties>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>9</source>
        <target>9</target>
    </configuration>
</plugin>

这似乎已经解决了问题。


1
对于Java 10+也是如此,并且想补充一点,在多模块Maven项目中仅在父POM中需要。
mmeany

在Java 9及更高版本中,有一个新的--release <version>编译器选项,它比源/目标优先。可以使用maven-compiler插件中的maven.compiler.release属性或<release>设置进行配置。请参阅:stackoverflow.com/questions/43102787/...
托马斯·泰勒

7

造成此问题的根本原因是,如果Eclipse 从pom生成/更新.c​​lasspath文件时,由于某种原因 Eclipse无法解析该属性的有效值maven.compiler.source,它将默认默认为using org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

正如@ jorge-campos的专家回答,设置该属性有多种方法。

但是,豪尔赫的答案似乎对我没有用。这是我的设置:

<properties>
    <javaVersion>1.8</javaVersion>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

...

究竟。${java.version}从来没有打算解决的(完全不同的)财产javaVersion和Eclipse忽略的财产,并使用默认值。

这使我回到了开头的“ 出于任何原因 ”部分;开发人员的愚蠢可能是这些原因之一。


1
如何更改org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName 2018年

不赞成说“开发人员的愚蠢可能是这些原因之一”。
卢克·哈奇森

就我而言,我正在使用Maven / Tycho来构建Eclipse插件,并且上述默认值最终是从MANIFEST.MF文件中指定的执行环境派生的。将执行环境更改为JavaSE-1.8可以解决此问题。
mat101

3

将此行添加到pom.xml中,然后右键单击JRE系统库->属性->将正确的执行环境设置为Java 1.8或要设置的版本。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin> 

您的答案丢失了<build> <plugins> ...您在这里的答案... </ plugins> </ build>,这对人们来说是一个更清晰的答案。
凯尔·布​​莱恩斯汀

1

我有这个问题。在我的情况下,上述Jorge Campos提到的<properties>标签和嵌套标签放在错误的位置。如果将它们放在pom.xml文件的<hostversion>和<dependencies>标记之间,则此行为停止。

如果打开这些文件的验证,则可以在Eclipse中进行选择。


1

我在我的队友计算机上遇到了类似的问题。他使用的是旧版本的Eclipse,我相信他使用的是Keppler。更新后的项目将JRE版本更改为1.5。

只需将Eclipse更新到最新版本即可解决此问题。


是的不 我正在运行Neon,我的工作区设置都是1.8,但是当我导入(或更新)Maven项目时,Eclipse坚持使用J2SE-1.5。
Antares42 '02 / 02/20

@ Antares42您是否可以从命令行进行构建而没有任何问题?您正在使用哪个m2e版本?
user902383 '17

1
我可以使用命令行进行构建(或者更确切地说是“运行方式-> Maven构建...”),而不会出现问题。但是,一旦我执行“ Maven-> Update project”,就得到了如上所述的JRE库,而Eclipse无法构建该项目。我仍然可以使用Maven进行构建。一旦添加了maven.compiler.source以上答案中提到的属性,一切就可以正常工作。我的m2e版本是1.7.1-20161104-1805。
Antares42 '17

1

就我而言(旧的JBoss Developer Studio),问题是JRE环境不包括1.8(仅包括1.7)。当我将maven-compiler-plugin版本切换到1.7并进行maven更新项目时,它将Eclipse JRE系统库更新到1.7。 在此处输入图片说明

因此,解决方案是获取包含1.8或更高版本的内置JRE环境的更新的IDE版本,或尝试手动安装(请参阅https://stackoverflow.com/a/35204314


0

我允许自己使用Java 11更新该主题。

我已经在计算机上安装了OpenJDK11,我想在应用程序中使用它。

我遇到了麻烦,因为当我用Maven更新项目时,Eclipse总是将JRE更改为JavaSE-1.5。

我已经按照您所说的进行了所有设置,但是我总是一直在Java构建路径“ java-11-openjdk.x86_64”中直接选择我的Alternante JRE之一。如图所示,我通过在“执行环境”中选择JavaSE-10(但您必须双击它,然后选择与您的OpenJDK11版本兼容的JRE)解决了我的问题。 执行环境设置

由于该原因,该项目将使用Java 11(图片),但是您必须在pom.xml中为Java版本编写10,并在Project Facets上设置Java 10。


0

我已经解决了从市场上安装Eclipse更新“ JAVA 12”的问题。这使我的日食从开普勒传到了露娜。

之后,我已经能够将1.8设置为标准JDK,从而解决了“ Maven更新”问题。


-3

我将Eclipse从开普勒更改为霓虹灯,然后使用Maven->更新项目更新了我的项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.