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>