当前位置: 首页 > 知识库问答 >
问题:

在pom.xml中定义maven.compiler时遇到的一些问题

杜骏祥
2023-03-14

A)总结问题

在pom Maven中定义编译器版本有三种方法。我没有提到maven.compiler的版本、插件和版本(意味着maven构建成功),然后是如何选择编译器版本的,我没有提到版本

关于我试过的东西,请参阅b节

<maven.compiler.target>1.8</maven.compiler.target>
  <maven.compiler.source>1.8</maven.compiler.source>
            <plugin> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-compiler-plugin</artifactId> 
            <version>3.8.1</version> 
            <configuration> 
                <source>1.8</source> 
                <target>1.8</target> 
                <verbose>true</verbose> 
            </configuration> 
    </plugin>
<maven.compiler.release> 8</maven.compiler.release>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>io.flowing.retail</groupId>
    <artifactId>flowing-retail-kafka-shipping</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>

        <spring.boot.version>2.2.5.RELEASE</spring.boot.version>
        <spring-cloud-stream.version>Horsham.RELEASE</spring-cloud-stream.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-stream-dependencies</artifactId>
                <version>${spring-cloud-stream.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <!-- required to add JSR310 time formats for Jackson to ObjectMapper -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
             <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>              
                <configuration>                         
                      <mainClass>io.flowing.retail.shipping.ShippingApplication</mainClass>
                </configuration>
             </plugin>
             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                      <goals>
                        <goal>repackage</goal>
                      </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

我定义了无效的Maven.Compiler.Release。然后它也起作用了

4.0.0 io.flowing.retail flow-retail-kafka-shipping 0.0.1-快照 108 UTF-8 1.8 1.8

         <spring.boot.version>2.2.5.RELEASE</spring.boot.version>
         <spring-cloud-stream.version>Horsham.RELEASE</spring-cloud-stream.version>
     </properties>
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>${spring.boot.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-stream-dependencies</artifactId>
                 <version>${spring-cloud-stream.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-stream-kafka</artifactId>
             <exclusions>
                 <exclusion>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-web</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
         <dependency>
             <!-- required to add JSR310 time formats for Jackson to ObjectMapper -->
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-json</artifactId>
         </dependency>
     </dependencies>
     <build>
         <plugins>
              <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>              
                 <configuration>                         
                       <mainClass>io.flowing.retail.shipping.ShippingApplication</mainClass>
                 </configuration>
              </plugin>
              <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <executions>
                     <execution>
                       <goals>
                         <goal>repackage</goal>
                       </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
 </project>

共有1个答案

邓昀
2023-03-14

[让我先澄清一下您在问题中使用的“选择编译器版本”这一表述。您使用的编译器是通过compileridcompilerversion选项配置的,通常是您安装的JDK的编译器。我们说的是设置您的编译器的兼容性选项。]

您提到的属性用于向javac编译器提供-source-target-release参数(如果您使用另一个编译器,也可以使用等价物)。

由于--release是在Java9中引入的,因此应用哪一个取决于运行Maven所使用的JDK。如果提供--release参数:

  • 在JDK 9和更高版本上,maven将忽略-source-target参数,
  • 在JDK 8及更低版本上,编译将严重失败。

maven-compiler-plugin指定了三种提供这些参数的方法:

    null
<configuration>
    ...
    <release implementation="java.lang.String">${maven.compiler.release}</release>
    ...
    <source implementathtml" target="_blank">ion="java.lang.String" default-value="1.6">${maven.compiler.source}</source>
    ...
    <target implementation="java.lang.String" default-value="1.6">${maven.compiler.target}</target>
</configuration>

因此,由于您使用的是该插件的3.8.1版本,如果您没有指定任何内容,则使用Java6。

如果您使用Java9或更高版本,您的配置选项将按照3.、2.、1的顺序应用。

编辑:如果您的编译器支持它,在设置-source/-target--release选项之间,我总是选择后者。使用--release选项,您就不会遇到类似这样的问题。那里发生的情况是:源语法与Java 8兼容(-source 1.8),类可以被JVM 8读取(-target 1.8),但是一个方法改变了Java 8和11之间的签名(以向后兼容的方式,但不是向前兼容的方式),并且库不能与JRE8一起工作。

 类似资料:
  • 我创建并尝试使用构建项目,但它不工作。不是这个项目,我试着构建我的所有项目,但在我的ubuntu笔记本电脑上不工作 [信息]扫描项目...从中心下载:https://repo . maven . Apache . org/maven 2/org/spring framework/boot/spring-boot-starter-parent/2 . 6 . 11/spring-boot-start

  • 我正在尝试从何处运行此源代码https://github.com/kishancs2020/TicketBookingServiceJunitTestingGithub在我的Jenkins中查看了在Jenkins文件中创建的管道源代码。 我已经更新了maven,java版本来修复它,但错误仍然是一样的。我也通过了这个链接http://cwiki.apache.org/confluence/disp

  • 我有一个Spring Boot应用程序,有两个配置文件:'dev'和'prod'。在'dev'配置文件应该使用H2数据库,在'prod'-PostgreSQL。 它们在pom.xml中定义如下: 另外,对于每个配置文件,我都有两个特定的属性文件: application-dev.properties: 和application-prod.properties(我将应用程序部署到AWS):

  • 尝试运行我的Spring启动应用程序,我的编译器说;“_worldcom.example.hello字段回购。UserService需要一个名为entityManagerFactory的bean,但找不到。 注入点有以下注释:-@org.springframework.beans.factory.annotation.自动生成(必需=true)" Spring启动的新手,所以我不太确定为什么我的项

  • Java代码: 应用程序在Android9及以下版本中运行,但当应用程序在Android10和11版本中运行时,应用程序会崩溃并出现文件错误。我认为创建临时文件有问题,因为它给了我一个错误。谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢谢你,谢

  • 我最近在VSCODE中调试时遇到了一个很大的问题。我已经试着通过搜索网站和重新安装我的一些扩展来修复它。 它不会在调试控制台中显示结果,而是将以下输出写入终端: