【问题标题】:Java version automatically change to java 1.5 after maven updatemaven更新后Java版本自动更改为java 1.5
【发布时间】:2015-04-15 02:30:41
【问题描述】:

我使用 Eclipse 作为 IDE。当我右键单击该项目,然后单击 maven 更新我的 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. 然后更改“项目方面”>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。我该如何解决这个问题?

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    打开您的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 版本。另一种方法是添加&lt;build&gt;maven-compile-plugin

    <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's answer,不要忘记给他一个支持好吧:)

    【讨论】:

    • 我想我已经做了第二种方法,我也发布了代码。看不到您在该代码中所做的更改
    • 是的。当我回答时,您还没有发布代码。所以,添加我的答案的第一部分。 properties 标签。如果您的 POM 已经有 properties 标签,只需在其中添加标签,它应该可以正常工作。
    • @asdlfkjlkj 您的 Eclipse 使用的是嵌入式 maven 还是外部 maven 安装?您的 Eclipse 指向 JRE 或 JDK 的另一个问题是什么?这是关于 eclipse + maven 的两个问题。
    • @JorgeCampos - 我发布了一个新问题。你对此有什么想法吗?*.com/questions/42855512/…
    • @JorgeCampos 我在哪里可以找到maven-complier-plugin 以添加&lt;build&gt;?谢谢
    【解决方案2】:

    我在安装 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>
    

    这似乎解决了问题。适用于版本 9 及更高版本。

    【讨论】:

    • 对于 Java 10+ 也是如此,并且想在多模块 Maven 项目中添加它只需要在父 POM 中。
    • 对于 Java 9 及更高版本,有一个新的 --release &lt;version&gt; 编译器选项,它优于源/目标。这可以使用 maven-compiler 插件中的maven.compiler.release 属性或&lt;release&gt; 设置进行配置。见:*.com/questions/43102787/…
    【解决方案3】:

    此问题的根本原因是,如果 出于任何原因 Eclipse 在生成/更新 .classpath 文件时无法解析 maven.compiler.source 属性的 有效 值从 pom 中,它将默认使用org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

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

    但是,Jorge 的回答似乎对我不起作用。这是我的设置:

    <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 忽略了该属性并使用了默认值。

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

    【讨论】:

    • 如何更改 org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5
    • 因说“开发人员的愚蠢可能是其中一个原因”而投反对票。
    • 在我的例子中,我使用 Maven/Tycho 来构建 Eclipse 插件,并且上述默认值最终源自 MANIFEST.MF 文件中指定的执行环境。将执行环境更改为 JavaSE-1.8 解决了该问题。
    • @LukeHutchison - 我指的是我自己的愚蠢,而不是其他人 - 但我感谢您对答案的反馈。
    【解决方案4】:

    将此行添加到您的 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> 
    

    【讨论】:

    • 您的答案丢失了 ...您的答案在这里... 这使得它对人们来说是一个更清晰的答案。
    【解决方案5】:

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

    简单地将 Eclipse 更新到最新版本即可解决此问题。

    【讨论】:

    • 是的,没有。我在运行 Neon,我的工作区设置都是 1.8,但是当我导入(或更新)一个 Maven 项目时,Eclipse 坚持使用 J2SE-1.5。
    • @Antares42 你能从命令行毫无问题地构建吗?您使用的是哪个 m2e 版本?
    • 我可以毫无问题地使用命令行(或者更确切地说“运行为 -> Maven 构建...”)构建。但是,一旦我执行“Maven -> 更新项目”,我就会得到提到的 JRE 库,并且 Eclipse 无法构建项目。不过,我仍然可以使用 Maven 构建。一旦我添加了上面答案中提到的maven.compiler.source 属性,一切正常。我的m2e版本是1.7.1-20161104-1805。
    【解决方案6】:

    就我而言(旧的 JBoss Developer Studio),问题是 JRE 环境不包括 1.8(只有 1.7)。当我将maven-compiler-plugin 版本切换到 1.7 并进行 maven 更新项目时,它会将 Eclipse JRE 系统库更新到 1.7。

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

    【讨论】:

      【解决方案7】:

      我遇到了这个问题。在我的例子中,上面提到的 标签和嵌套标签 Jorge Campos 放错了地方。如果我将它们放在 pom.xml 文件中的 标记之间,那么这种行为就会停止。

      如果打开这些文件的验证,则可以在 Eclipse 中获取。

      【讨论】:

        【解决方案8】:

        我正在使用 Java 11。 这是添加后完整的 pom.xml 文件的样子 &lt;properties&gt;&lt;plugin&gt;

        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>com.akshay</groupId>
          <artifactId>1000SpringSecurityEg</artifactId>
          <packaging>war</packaging>
          <version>0.0.1-SNAPSHOT</version>
          <name>1000SpringSecurityEg Maven Webapp</name>
          <url>http://maven.apache.org</url>
            
          <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
            </dependency>
          </dependencies>
          
            <properties>
                <javaVersion>11</javaVersion>
                <maven.compiler.source>${java.version}</maven.compiler.source>
                <maven.compiler.target>${java.version}</maven.compiler.target>
            </properties>
          
          <build>
            <finalName>1000SpringSecurityEg</finalName>
            
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.1</version>
                        <configuration>
                            <source>11</source>
                            <target>11</target>
                        </configuration>
                    </plugin>
                </plugins>
                
          </build>
        </project>
        

        上面的代码对我有用。 希望它也适用于您。

        【讨论】:

          【解决方案9】:
          <properties>
             <maven.compiler.source>11</maven.compiler.source>
             <maven.compiler.target>11</maven.compiler.target>
          </properties>
          

          我在我的“pom.xml”文件中添加了这些行并且它起作用了。

          【讨论】:

            【解决方案10】:

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

            我已经在我的电脑上安装了 OpenJDK11,我想在应用程序中使用它。

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

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

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

            【讨论】:

              【解决方案11】:

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

              之后,我已经能够将 1.8 设置为标准 JDK,修复“maven 更新”问题。

              【讨论】:

                【解决方案12】:

                我体验过 JRE 15.0.1 必须只指定编译器插件,例如

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

                如果我也提供类似的属性

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

                这将在Maven / Update Project 上再次重置为 JRE 1.5 !!!

                【讨论】:

                  【解决方案13】:

                  如果有任何带有此maven.enforcer.plugin.version 的标签,请在属性下检查pom.xml。删除它并用下面的代码替换它

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

                  在属性标签下。

                  在构建下,用以下代码替换插件:

                   <build>
                      <finalName>1000SpringSecurityEg</finalName>
                      
                          <plugins>
                              <plugin>
                                  <groupId>org.apache.maven.plugins</groupId>
                                  <artifactId>maven-compiler-plugin</artifactId>
                                  <version>3.5.1</version>
                                  <configuration>
                                      <source>1.8</source>
                                      <target>1.8</target>
                                  </configuration>
                              </plugin>
                          </plugins>
                          
                    </build>
                  

                  这个解决方案解决了我的问题。

                  【讨论】:

                    【解决方案14】:

                    我将 Eclipse 从 kepler 更改为 neon,然后使用 Maven -> Update Project 更新了我的项目。

                    【讨论】: