Maven的settings.xml笔记231208
https://maven.apache.org/ref/
官方文档的模板
官方文档模板3.9.6版
https://maven.apache.org/ref/3.9.6/maven-settings/settings.html
The default location for the settings file is ~/.m2/settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"><localRepository/><interactiveMode/><usePluginRegistry/><offline/><proxies><proxy><active/><protocol/><username/><password/><port/><host/><nonProxyHosts/><id/></proxy></proxies><servers><server><username/><password/><privateKey/><passphrase/><filePermissions/><directoryPermissions/><configuration/><id/></server></servers><mirrors><mirror><mirrorOf/><name/><url/><layout/><mirrorOfLayouts/><blocked/><id/></mirror></mirrors><profiles><profile><activation><activeByDefault/><jdk/><os><name/><family/><arch/><version/></os><property><name/><value/></property><file><missing/><exists/></file></activation><properties><key>value</key></properties><repositories><repository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></repository></repositories><pluginRepositories><pluginRepository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></pluginRepository></pluginRepositories><id/></profile></profiles><activeProfiles/><pluginGroups/></settings>
官方文档模板 3.6.0 版
https://maven.apache.org/ref/3.6.0/maven-settings/settings.html
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"><localRepository/><interactiveMode/><usePluginRegistry/><offline/><proxies><proxy><active/><protocol/><username/><password/><port/><host/><nonProxyHosts/><id/></proxy></proxies><servers><server><username/><password/><privateKey/><passphrase/><filePermissions/><directoryPermissions/><configuration/><id/></server></servers><mirrors><mirror><mirrorOf/><name/><url/><layout/><mirrorOfLayouts/><id/></mirror></mirrors><profiles><profile><activation><activeByDefault/><jdk/><os><name/><family/><arch/><version/></os><property><name/><value/></property><file><missing/><exists/></file></activation><properties><key>value</key></properties><repositories><repository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></repository></repositories><pluginRepositories><pluginRepository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></pluginRepository></pluginRepositories><id/></profile></profiles><activeProfiles/><pluginGroups/>
</settings>
官方文档模板 3.1.0 版
https://maven.apache.org/ref/3.1.0/maven-settings/settings.html
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"><localRepository/><interactiveMode/><usePluginRegistry/><offline/><proxies><proxy><active/><protocol/><username/><password/><port/><host/><nonProxyHosts/><id/></proxy></proxies><servers><server><username/><password/><privateKey/><passphrase/><filePermissions/><directoryPermissions/><configuration/><id/></server></servers><mirrors><mirror><mirrorOf/><name/><url/><layout/><mirrorOfLayouts/><id/></mirror></mirrors><profiles><profile><activation><activeByDefault/><jdk/><os><name/><family/><arch/><version/></os><property><name/><value/></property><file><missing/><exists/></file></activation><properties><key>value</key></properties><repositories><repository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></repository></repositories><pluginRepositories><pluginRepository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></pluginRepository></pluginRepositories><id/></profile></profiles><activeProfiles/><pluginGroups/>
</settings>
官方文档模板 3.0 版 , 2010年
https://maven.apache.org/ref/3.0/maven-settings/settings.html
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"><localRepository/><interactiveMode/><usePluginRegistry/><offline/><proxies><proxy><active/><protocol/><username/><password/><port/><host/><nonProxyHosts/><id/></proxy></proxies><servers><server><username/><password/><privateKey/><passphrase/><filePermissions/><directoryPermissions/><configuration/><id/></server></servers><mirrors><mirror><mirrorOf/><name/><url/><layout/><mirrorOfLayouts/><id/></mirror></mirrors><profiles><profile><activation><activeByDefault/><jdk/><os><name/><family/><arch/><version/></os><property><name/><value/></property><file><missing/><exists/></file></activation><properties><key>value</key><properties/><repositories><repository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></repository></repositories><pluginRepositories><pluginRepository><releases><enabled/><updatePolicy/><checksumPolicy/></releases><snapshots><enabled/><updatePolicy/><checksumPolicy/></snapshots><id/><name/><url/><layout/></pluginRepository></pluginRepositories><id/></profile></profiles><activeProfiles/><pluginGroups/>
</settings>
true是Maven profile中的一个元素,它表示如果没有任何其他的profile被显式激活,那么这个profile将会被默认激活。
在Maven中,你可以定义多个profile,每个profile可以包含一些特定的设置,例如仓库的位置、插件的版本、依赖的版本等等。这些设置可以在不同的环境中使用,例如在开发环境、测试环境和生产环境中使用不同的设置。当你运行Maven命令时,你可以通过一些方式来显式地激活一个或多个profile,例如通过命令行参数或者通过设置环境变量。
但是,如果没有任何profile被显式激活,Maven将会使用哪个profile呢?这时,元素就起作用了。如果你在profile中将设置为true,那么这个profile将会在没有任何其他profile被显式激活的情况下被默认激活。
需要注意的是,如果有多个profile都将设置为true,那么Maven将会使用第一个在settings.xml文件中定义的profile。因此,你需要确保你的settings.xml文件中定义的profile的顺序是有意义的。
总的来说,true的作用是在没有其他profile被显式激活的情况下,默认激活这个profile。这可以帮助你确保在没有指定任何特定设置的情况下,Maven仍然可以使用一些合理的默认设置来构建你的项目。
设置 Java Jdk 版本
maven.compiler.source
maven.compiler.source
是 Maven 中的一个属性,它用于指定编译器编译源代码的 Java 版本。
在 Maven 的 pom.xml
文件中,你可以通过在 <properties>
标签中设置 maven.compiler.source
属性来指定编译器编译源代码的 Java 版本。例如,要将编译器源代码版本设置为 1.8,你可以在 pom.xml
文件中添加以下代码:
<properties><maven.compiler.source>1.8</maven.compiler.source>
</properties>
这将告诉 Maven 使用 Java 1.8 版本的编译器来编译源代码。你可以根据需要将 maven.compiler.source
属性设置为其他 Java 版本。
请注意,maven.compiler.source
属性仅指定编译器编译源代码的 Java 版本。如果你还需要指定编译器生成目标字节码的 Java 版本,你应该使用 maven.compiler.target
属性。例如,要将编译器目标字节码版本设置为 1.8,你可以在 pom.xml
文件中添加以下代码:
<properties><maven.compiler.target>1.8</maven.compiler.target>
</properties>
通过设置 maven.compiler.source
和 maven.compiler.target
属性,你可以确保 Maven 使用正确的 Java 版本进行编译,并生成符合目标环境的字节码。
maven.compiler.target
maven.compiler.target
是 Maven 中的一个属性,它用于指定编译器生成目标字节码的 Java 版本。
在 Maven 的 pom.xml
文件中,你可以通过在 <properties>
标签中设置 maven.compiler.target
属性来指定编译器生成目标字节码的 Java 版本。例如,要将编译器目标字节码版本设置为 1.8,你可以在 pom.xml
文件中添加以下代码:
<properties><maven.compiler.target>1.8</maven.compiler.target>
</properties>
这将告诉 Maven 使用 Java 1.8 版本的编译器生成目标字节码。你可以根据需要将 maven.compiler.target
属性设置为其他 Java 版本。
请注意,maven.compiler.target
属性仅指定编译器生成目标字节码的 Java 版本。如果你还需要指定编译器编译源代码的 Java 版本,你应该使用 maven.compiler.source
属性。例如,要将编译器源代码版本设置为 1.8,你可以在 pom.xml
文件中添加以下代码:
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
</properties>
通过设置 maven.compiler.source
和 maven.compiler.target
属性,你可以确保 Maven 使用正确的 Java 版本进行编译,并生成符合目标环境的字节码。
maven.compiler.compilerVersion
maven.compiler.compilerVersion
是 Maven 中的一个属性,它用于指定编译器编译源代码的版本。
在 Maven 的 pom.xml
文件中,你可以通过在 <properties>
标签中设置 maven.compiler.compilerVersion
属性来指定编译器编译源代码的版本。例如,要将编译器版本设置为 1.8,你可以在 pom.xml
文件中添加以下代码:
<properties><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
这将告诉 Maven 使用 Java 1.8 版本的编译器来编译源代码。你可以根据需要将 maven.compiler.compilerVersion
属性设置为其他编译器版本。
请注意,maven.compiler.compilerVersion
属性并不是必需的。如果你没有设置该属性,Maven 将使用默认的编译器版本,这通常是系统上安装的默认 Java 版本。
另外,如果你已经设置了 maven.compiler.source
和 maven.compiler.target
属性来指定编译器编译源代码的 Java 版本和生成目标字节码的 Java 版本,那么这些属性将优先于 maven.compiler.compilerVersion
属性。这意味着如果你没有显式设置 maven.compiler.compilerVersion
属性,Maven 将使用与 maven.compiler.source
和 maven.compiler.target
属性指定的 Java 版本相对应的编译器版本。
maven在settings.xm和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>