目录
  • Maven 在 settings.xml 中指定jdk版本
    • 方法一, 直接写死, 例如指定jdk21
    • 引用属性变量,只在一个地方修设值jdk版本
    • Maven 在 pom.xml 中指定jdk版本
  • 总结 

    maven在settings.xml和pom.xml中指定jdk版本编译的方法

    maven的settings.xm和pom.xml都可以通过 maven.compiler.source , maven.compiler.target 这两个属性值来指定jdk版本

    • maven.compiler.source

    • maven.compiler.target

    maven.compiler.source
    
    maven.compiler.target
    

    在pom.xml中的位置

    <project>
      <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
      </properties>
    </project>
    

    在settings.xml中的位置

    <settings>
        <profiles>
            <profile>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <maven.compiler.source>21</maven.compiler.source>
                    <maven.compiler.target>21</maven.compiler.target>  <!-- JRE System Liblary 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
    </settings>
    

    在spring项目中, 用java.version来统一设置

    maven的settings.xm和pom.xml也可以通过设定 maven-compiler-plugin 这个插件来指定jdk版本

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

    在pom.xml中的位置

    <project>
      ...
      <build>
        ...
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.9.6</version>
            <configuration>
              <source>21</source>
              <target>21</target>
            </configuration>
          </plugin>
        </plugins>
        ...
      </build>
      ...
    </project>
    

    在settings.xml中的位置 , 好像用不了

    <settings>
      ...
      <profiles>
        <profile>
          <id>profile-maven-compiler-plugin</id>
          <activation>
            <activeByDefault>true</activeByDefault>
          </activation>
          <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.9.6</version>
                <configuration>
                  <source>17</source>
                  <target>17</target>
                </configuration>
              </plugin>
            </plugins>
          </build>
        </profile>
      </profiles>
      ...
    </settings>
    

    Maven 在 settings.xml 中指定jdk版本

    settings.xml 中的属性写在 setting?profiles?profile?properties中,位于第5层

    方法一, 直接写死, 例如指定jdk21

    <settings>
        <profiles>
            <profile>
                <id>jdk-version-21</id>
                <!-- id和activation都可以用于激活该profile, 定义id可以在activeProfiles的activeProfile里设置该id从而激活该id代表的profile, id和activation可以只保留一个,也可两个都使用.  -->
                <activation>
                    <activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用<activeProfile>jdk-version-21</activeProfile>再次确保该profile激活 -->
                </activation>
                <!--要使properties起作用, properties所属的profile必须在激活状态  -->
                <properties>
                    <maven.compiler.source>21</maven.compiler.source>
                    <maven.compiler.target>21</maven.compiler.target>  <!-- JRE System Liblary 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
        <!--  activeProfiles里的activeProfile对应profiles里的profile的id; 是激活profile的方式之一; 在activeProfiles中激活的profile可以不要activation标签了-->
        <!--  activeProfiles与profiles同级是第二级, profile是第三级, settings → activeProfiles → activeProfile  ,  activeProfile可以有多个-->
        <activeProfiles>
            <!-- 要激活的profile的id , 在这里激活了的profile里的activation就无效了,可以去掉,当然也可以保留-->
            <activeProfile>jdk-version-21</activeProfile>  <!-- 要激活的profile的id . 这里和上面该id的profile中的 <activeByDefault>true</activeByDefault> 任一个都能激活该id代表的profile, 两处设置确保启用该profile-->
        </activeProfiles>
    </settings>
    

    去掉注释

        <profiles>
            <profile>
                <id>jdk-version-21</id>
                <activation>
                    <activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用<activeProfile>jdk-version-21</activeProfile>再次确保该profile激活 -->
                </activation>
                <properties>
                    <maven.compiler.source>21</maven.compiler.source>
                    <maven.compiler.target>21</maven.compiler.target>  <!-- JRE System Liblary 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
        <activeProfiles>
            <activeProfile>jdk-version-21</activeProfile>  <!-- 要激活的profile的id . 这里和上面该id的profile中的 <activeByDefault>true</activeByDefault> 任一个都能激活该id代表的profile, 两处设置确保启用该profile-->
        </activeProfiles>

    只用 <activeByDefault>true</activeByDefault> 激活, 可以不要 <id>jdk-version-21</id>和 <activeProfile>jdk-version-21</activeProfile>

        <profiles>
            <profile>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <maven.compiler.source>21</maven.compiler.source>
                    <maven.compiler.target>21</maven.compiler.target>  <!-- JRE System Liblary 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
    

    只用 <activeProfile>jdk-version-21</activeProfile> 激活 , 则可以不要

        <profiles>
            <profile>
                <id>jdk-version-21</id>
                <properties>
                    <maven.compiler.source>21</maven.compiler.source>
                    <maven.compiler.target>21</maven.compiler.target>  <!-- JRE System Liblary 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
        <activeProfiles>
            <activeProfile>jdk-version-21</activeProfile>
        </activeProfiles>
    

    引用属性变量,只在一个地方修设值jdk版本

    <settings>
        <profiles>
            <profile>
                <id>set-jdk-version</id>
                <!-- id和activation都可以用于激活该profile, 定义id可以在activeProfiles的activeProfile里设置该id从而激活该id代表的profile, id和activation可以只保留一个,也可两个都使用.  -->
                <activation>
                    <activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用<activeProfile>jdk-version-21</activeProfile>再次确保该profile激活 -->
                </activation>
                <!--要使properties起作用, properties所属的profile必须在激活状态  -->
                <properties>
                    <jdk-version>21</jdk-version> <!--自定义一个属性用来设置版本,之后可以用${该属性名引用},就不用多处修改了-->
                    <maven.compiler.source>${jdk-version}</maven.compiler.source>
                    <maven.compiler.target>${jdk-version}</maven.compiler.target>  <!-- JRE System Library 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
        <!--  activeProfiles里的activeProfile对应profiles里的profile的id; 是激活profile的方式之一; 在activeProfiles中激活的profile可以不要activation标签了-->
        <!--  activeProfiles与profiles同级是第二级, profile是第三级, settings → activeProfiles → activeProfile  ,  activeProfile可以有多个-->
        <activeProfiles>
            <!-- 要激活的profile的id , 在这里激活了的profile里的activation就无效了,可以去掉,当然也可以保留-->
            <activeProfile>set-jdk-version</activeProfile>  <!-- 要激活的profile的id . 这里和上面该id的profile中的 <activeByDefault>true</activeByDefault> 任一个都能激活该id代表的profile, 两处设置确保启用该profile-->
        </activeProfiles>
    </settings>
    

    一处设置,双重激活

        <profiles>
            <profile>
                <id>set-JdkVersion</id>
                <activation>
                    <activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用<activeProfile>JdkVersion-21</activeProfile>再次确保该profile激活 -->
                </activation>
                <properties>
                    <JdkVersion>21</JdkVersion> <!--自定义一个属性用来设置版本,之后可以用${该属性名引用},就不用多处修改了-->
                    <maven.compiler.source>${JdkVersion}</maven.compiler.source>
                    <maven.compiler.target>${JdkVersion}</maven.compiler.target>  <!-- JRE System Library 的版本和这句相同  -->
                </properties>
            </profile>
        </profiles>
        <activeProfiles>
            <activeProfile>set-JdkVersion</activeProfile>  <!-- 要激活的profile的id . 这里和上面该id的profile中的 <activeByDefault>true</activeByDefault> 任一个都能激活该id代表的profile, 两处设置确保启用该profile-->
        </activeProfiles>
    

    Maven 在 pom.xml 中指定jdk版本

    在pom.xml中可以用设置属性或者设置插件两种方法来设置jdk版本

    • 用设置属性的方式
    <project>
      <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
      </properties>
    </project>
    
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
    
    • 用设置插件的方式 , 设置插件的方式优先级高于设置属性
    <project>
      ...
      <build>
        ...
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- <version>3.9.6</version> --> <!-- 可以不要version -->
            <configuration>
              <source>21</source>
              <target>21</target>
            </configuration>
          </plugin>
        </plugins>
        ...
      </build>
      ...
    </project>
    
    • 用设置插件的方式 , 设置插件的方式优先级高于设置属性
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- <version>3.9.6</version> --> <!-- 可以不要version -->
            <configuration>
              <source>21</source>
              <target>21</target>
            </configuration>
          </plugin>
        </plugins>
    

    两种方法都用上, , 插件的优先级高于属性

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <JdkVersionOfThisPom>17</JdkVersionOfThisPom>
        <java.version>${JdkVersionOfThisPom}</java.version>
        <maven.compiler.source>${JdkVersionOfThisPom}</maven.compiler.source>
        <maven.compiler.target>${JdkVersionOfThisPom}</maven.compiler.target>
        <maven.compiler.compilerVersion>${JdkVersionOfThisPom}</maven.compiler.compilerVersion>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
    <!--        <version>3.9.6</version>-->
            <configuration>
              <source>${JdkVersionOfThisPom}</source>
              <target>${JdkVersionOfThisPom}</target>
              <compilerVersion>${JdkVersionOfThisPom}</compilerVersion>
            </configuration>
          </plugin>
        </plugins>
      </build>

    总结 

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。