Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Maven编译简单的Java 10/Java 11项目_Java_Maven_Java 10_Java 11_Module Info - Fatal编程技术网

无法使用Maven编译简单的Java 10/Java 11项目

无法使用Maven编译简单的Java 10/Java 11项目,java,maven,java-10,java-11,module-info,Java,Maven,Java 10,Java 11,Module Info,我有一个简单的Maven项目: src └── main └── java └── module-info.java pom.xml pom.xml: <groupId>org.example</groupId> <artifactId>example</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</pack

我有一个简单的Maven项目:

src
└── main
    └── java
        └── module-info.java
pom.xml
pom.xml:

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>
有办法解决这个问题吗?

更新 答案现在已经过时了。请参阅。


maven编译器插件
依赖于旧版本的ASM,它还不支持Java 10(和Java 11)。但是,可以明确指定ASM的正确版本:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <release>10</release>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>

org.apache.maven.plugins

自2018年7月30日起,为了解决上述问题,可以将maven中使用的java版本配置为JDK/11之前的任何版本,并利用指定9、10、11的版本,而无任何显式依赖项


org.apache.maven.plugins


编辑[30.12.2018]

事实上,在针对JDK/12编译代码时,您也可以使用相同版本的
maven编译器插件


更多详细信息和一个示例配置说明如何操作。

maven编译器插件
升级到
3.8.0
似乎是必要的,但还不够。如果仍然存在问题,那么如果从命令行运行,还应该确保将
JAVA_HOME
环境变量设置为JAVA 10(或11)。(您收到的错误消息不会告诉您这一点。)或者,如果您是从IDE运行,则需要确保将其设置为使用当前JDK运行maven。

指定maven.compiler.source和target版本

1) Maven版本,支持您使用的jdk。在我的例子中,JDK 11和maven 3.6.0

2) pom.xml

我制作了一些快速入门项目,我在我的其他项目中重复使用这些项目,请随意查看:


    • 可能不是完全相同的错误,但我有一个类似的错误

      检查Maven Java版本

      由于Maven也使用Java运行,请首先检查Maven运行的版本:

      mvn --version | grep -i java 
      
      它返回:

      Java版本1.8.0_151,供应商:Oracle 公司,运行时:C:\tools\jdk\openjdk1.8

      不兼容版本

      上图中,我的maven运行的是
      JavaVersion1.8.0\u151
      。 因此,即使我指定maven使用
      Java11
      进行编译:

      <properties>
          <java.version>11</java.version>
          <maven.compiler.source>${java.version}</maven.compiler.source>
          <maven.compiler.target>${java.version}</maven.compiler.target>
      </properties>
      
      屈服

      Java版本:11.0.2,供应商:Oracle公司,运行时:C:\tools\jdk\openjdk11


      编译使用Java 11规范编写的代码时,哪种方法更好、更正确。

      好吧,所以对我来说没有任何效果。
      我在使用SpringBoot和hibernate。spring启动版本是~2.0.1,我会在编译时继续得到这个错误和空指针异常。问题在于hibernate需要版本升级。但在那之后,我遇到了一些其他问题,似乎注释处理器没有被识别,所以我决定将spring从2.0.1版本升级到2.1.7版本,一切都按预期进行

      您仍然需要添加上述插件

      希望有帮助

      如果您使用的是spring boot,那么在pom.xml中添加这些标记

      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      
      
      org.springframework.boot
      springbootmaven插件
      

      
      UTF-8
      UTF-8
      ``10
      
      您也可以在
      标记中将java版本更改为11或13

      只需在pom.xml中添加以下标记

      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
          <maven.compiler.release>11</maven.compiler.release>
      </properties>
      
      
      UTF-8
      UTF-8
      11
      

      您可以将11更改为10,也可以将13更改为java版本。我正在使用最新的Java13。它对我很有用。

      在我的例子中,我必须在脚本中显式地将JAVA_HOME设置为JDK-11,尽管终端显示的是JAVA 11版本

      这是因为,我正在通过shell脚本执行
      mvn
      ,而
      mvn
      使用的是我机器的默认JDK,即JDK8

      我在脚本中确认了
      mvn
      正在使用哪个JDK版本,并设置为JDK-11,如下所示:

      #!/bin/bash
      echo $(java -version)
      echo $(mvn --version | grep -i java )
      
      export JAVA_HOME="/opt/jdk11/"
      export PATH=$JAVA_HOME/bin:$PATH
      
      echo $(java -version)
      echo $(mvn --version | grep -i java )
      

      @MikhailKholodkov这个错误已经解决了,现在可以解决了。这只有在使用Java11执行maven时才能立即解决。如果您的平台Java版本是例如Java 8(因此maven是用Java 8执行的),您需要定义一个工具链,注意关联的属性是
      maven.compiler.release
      11
      @OlivierGrégoire-那么,我们可以用您给出的代码替换此代码吗?1.8 1.8@MasterJoe2是的,考虑到您正在升级到Java-11,您应该能够做到这一点。需要明确的是:您必须使用等于或高于发布目标版本和源目标版本的Java版本运行maven。这对我来说很有效,在使用maven assembly plugin版本3.2.0时也是如此
      mvn --version | grep -i java 
      
      <properties>
          <java.version>11</java.version>
          <maven.compiler.source>${java.version}</maven.compiler.source>
          <maven.compiler.target>${java.version}</maven.compiler.target>
      </properties>
      
      mvn --version | grep -i java
      
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      
      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
          `<maven.compiler.release>`10</maven.compiler.release>
      </properties>
      
      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
          <maven.compiler.release>11</maven.compiler.release>
      </properties>
      
      #!/bin/bash
      echo $(java -version)
      echo $(mvn --version | grep -i java )
      
      export JAVA_HOME="/opt/jdk11/"
      export PATH=$JAVA_HOME/bin:$PATH
      
      echo $(java -version)
      echo $(mvn --version | grep -i java )