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></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 中的属性写在 settingprofilesprofileproperties中,位于第5层

方法一, 直接写死, 例如指定jdk21
<settings><profiles><profile><id>jdk-version-21</id><activation><activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用jdk-version-21再次确保该profile激活 --></activation><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target></properties></profile></profiles><activeProfiles><activeProfile>jdk-version-21</activeProfile><!-- 要激活的profile的id . 这里和上面该id的profile中的 true 任一个都能激活该id代表的profile, 两处设置确保启用该profile--></activeProfiles></settings>

去掉注释

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

只用 true 激活, 可以不要 jdk-version-21jdk-version-21

<profiles><profile><activation><activeByDefault>true</activeByDefault></activation><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target></properties></profile></profiles>

只用 jdk-version-21 激活 , 则可以不要

<profiles><profile><id>jdk-version-21</id><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target></properties></profile></profiles><activeProfiles><activeProfile>jdk-version-21</activeProfile></activeProfiles>
引用属性变量,只在一个地方修设值jdk版本
<settings><profiles><profile><id>set-jdk-version</id><activation><activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用jdk-version-21再次确保该profile激活 --></activation><properties><jdk-version>21</jdk-version> <maven.compiler.source>${jdk-version}</maven.compiler.source><maven.compiler.target>${jdk-version}</maven.compiler.target></properties></profile></profiles><activeProfiles><activeProfile>set-jdk-version</activeProfile><!-- 要激活的profile的id . 这里和上面该id的profile中的 true 任一个都能激活该id代表的profile, 两处设置确保启用该profile--></activeProfiles></settings>

一处设置,双重激活

<profiles><profile><id>set-JdkVersion</id><activation><activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用JdkVersion-21再次确保该profile激活 --></activation><properties><JdkVersion>21</JdkVersion> <maven.compiler.source>${JdkVersion}</maven.compiler.source><maven.compiler.target>${JdkVersion}</maven.compiler.target></properties></profile></profiles><activeProfiles><activeProfile>set-JdkVersion</activeProfile><!-- 要激活的profile的id . 这里和上面该id的profile中的 true 任一个都能激活该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><!-- 3.9.6 --> <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><!-- 3.9.6 --> <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><!--3.9.6--><configuration><source>${JdkVersionOfThisPom}</source><target>${JdkVersionOfThisPom}</target><compilerVersion>${JdkVersionOfThisPom}</compilerVersion></configuration></plugin></plugins></build>