• Maven 之 settings.xml文件详解


    目录

    一. 前言

    二. settings.xml 文件详解

    2.1. 配置节点详解

    2.2. 实例详解

    三. mirrorOf 详解


    一. 前言

        Maven是一个流行的Java项目构建工具,它使用pom.xml文件来定义项目的配置和依赖关系。然而,Maven还提供了另一个重要的文件——setting.xml文件,用于配置Maven本身的行为。在本文中,我们将深入介绍setting.xml文件的作用和常见的配置选项。

        关于Maven的详细介绍请参见《Maven 从入门到精通》

    二. settings.xml 文件详解

    2.1. 配置节点详解

        直接修改安装包下 setting.xml 文件,就能在机器上全局地定制 Maven 的行为。一般情况下,我们更偏向于复制该文件至 ~/.m2/ 目录下(~表示用户目录;在Linux或Mac OS X中,它的默认位置是 ~/.m2/settings.xml,在Windows系统中,它的默认位置是%USER_HOME%.m2\settings.xml),然后修改该文件,在用户范围定制 Maven 的行为。Maven运行时,先找用户目录 .m2 文件夹的 settings.xml,没有的话去安装包里面找全局的settings.xml。

        实际应用中,经常使用的是 这几个节点,其他节点使用默认值足够应对大部分的应用场景。

    配置节点默认值说明
    localRepository/path/to/local/repo本地仓库
    interactiveModetrueMaven是否需要和用户交互以获得输入。
    usePluginRegistryfalseMaven是否需要使用plugin-registry.xml文件来管理插件版本。
    offlinefalseMaven是否需要在离线模式下运行。
    pluginGroups当插件的组织Id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。
    pluginGroups.pluginGroupplugin的组织Id(groupId)
    proxies配置代理节点
    proxies.proxy具体代理节点
    proxies.proxy.idoptional代理的唯一定义符,用来区分不同的代理元素。
    proxies.proxy.activetrue是否激活
    proxies.proxy.protocolhttp代理的协议
    proxies.proxy.usernameproxyuser代理的用户名
    proxies.proxy.passwordproxypass代理的密码
    proxies.proxy.hostproxy.host.net代理的主机名
    proxies.proxy.port80代理的端口
    proxies.proxy.nonProxyHostslocal.net|some.host.com不该被代理的主机名列表。
    servers服务端配置节点
    servers.server具体的服务端配置
    servers.server.iddeploymentReposerver的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。
    servers.server.usernamerepouser鉴权用户名
    servers.server.passwordrepopwd鉴权密码
    servers.server.privateKey/path/to/private/key鉴权时使用的私钥位置。
    servers.server.passphraseoptional; leave empty if not used.鉴权时使用的私钥密码。
    servers.server.filePermissions文件被创建时的权限。
    servers.server.directoryPermissions目录被创建时的权限。
    servers.server.configuration传输层额外的配置项。
    mirrors镜像列表
    mirrors.mirror具体的镜像节点
    mirrors.mirror.idmirrorId镜像id
    mirrors.mirror.nameHuman Readable Name for this Mirror.镜像名称
    mirrors.mirror.url镜像的URL
    mirrors.mirror.mirrorOfrepositoryId被镜像的服务器的id
    profiles根据环境参数来调整构建配置的列表。
    profiles.profile具体的环境配置节点
    profiles.profile.id该配置的唯一标识符。
    profiles.profile.activation自动触发profile的条件逻辑。
    profiles.profile.activation.jdk1.8activation有一个内建的java版本检测,如果检测到jdk版本与期待的一样,profile被激活。
    profiles.profile.activation.property如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。
    profiles.profile.activation.property.nametarget-env激活profile的属性的名称
    profiles.profile.activation.property.valuedev激活profile的属性的值
    profiles.profile.repositories远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。

    profiles.profile.repositories

    .repository

    具体的远程仓库节点

    profiles.profile.repositories

    .repository.id

    远程仓库唯一标识

    profiles.profile.repositories

    .repository.name

    远程仓库名称

    profiles.profile.repositories

    .repository.url

    远程仓库URL

    profiles.profile.repositories

    .repository.layout

    default用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。

    profiles.profile.repositories

    .repository.snapshotPolicy

    always
    profiles.profile.properties对应profile的扩展属性列表。
    profiles.profile.properties.tomcatPath如果这个profile被激活,那么属性${user.install}就可以被访问了
    activeProfilesalwaysActiveProfile手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。
    activeProfiles.activeProfile具体的激活profile

    2.2. 实例详解

    1. "1.0" encoding="UTF-8"?>
    2. <settings xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    5. <localRepository>usr/local/mavenlocalRepository>
    6. <interactiveMode>trueinteractiveMode>
    7. <usePluginRegistry>falseusePluginRegistry>
    8. <offline>falseoffline>
    9. <pluginGroups>
    10. <pluginGroup>org.codehaus.mojopluginGroup>
    11. pluginGroups>
    12. <proxies>
    13. <proxy>
    14. <id>myproxyid>
    15. <active>trueactive>
    16. <protocol>http://…protocol>
    17. <host>proxy.somewhere.comhost>
    18. <port>8080port>
    19. <username>proxyuserusername>
    20. <password>somepasswordpassword>
    21. <nonProxyHosts>*.google.com|ibiblio.orgnonProxyHosts>
    22. proxy>
    23. proxies>
    24. <servers>
    25. <server>
    26. <id>server001id>
    27. <username>my_loginusername>
    28. <password>my_passwordpassword>
    29. <privateKey>${usr.home}/.ssh/id_dsaprivateKey>
    30. <passphrase>some_passphrasepassphrase>
    31. <filePermissions>664filePermissions>
    32. <directoryPermissions>775directoryPermissions>
    33. <configuration>configuration>
    34. server>
    35. servers>
    36. <mirrors>
    37. <mirror>
    38. <id>planetmirror.comid>
    39. <name>PlanetMirror Australianame>
    40. <url>http://downloads.planetmirror.com/pub/maven2url>
    41. <mirrorOf>centralmirrorOf>
    42. mirror>
    43. mirrors>
    44. <profiles>
    45. <profile>
    46. <id>testid>
    47. <activation>
    48. <activeByDefault>falseactiveByDefault>
    49. <jdk>1.8jdk>
    50. <os>
    51. <name>Windows 10name>
    52. <family>Windowsfamily>
    53. <arch>x86arch>
    54. <version>5.1.2600version>
    55. os>
    56. <property>
    57. <name>mavenVersionname>
    58. <value>2.0.3value>
    59. property>
    60. <file>
    61. <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/exists>
    62. <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/missing>
    63. file>
    64. activation>
    65. <properties>
    66. <user.install>usr/local/winner/jobs/maven-guideuser.install>
    67. properties>
    68. <repositories>
    69. <repository>
    70. <id>codehausSnapshotsid>
    71. <name>Codehaus Snapshotsname>
    72. <releases>
    73. <enabled>falseenabled>
    74. <updatePolicy>alwaysupdatePolicy>
    75. <checksumPolicy>warnchecksumPolicy>
    76. releases>
    77. <snapshots>
    78. <enabled />
    79. <updatePolicy />
    80. <checksumPolicy />
    81. snapshots>
    82. <url>http://snapshots.maven.codehaus.org/maven2url>
    83. <layout>defaultlayout>
    84. repository>
    85. repositories>
    86. <pluginRepositories>
    87. <pluginRepository>
    88. <releases>
    89. <enabled />
    90. <updatePolicy />
    91. <checksumPolicy />
    92. releases>
    93. <snapshots>
    94. <enabled />
    95. <updatePolicy />
    96. <checksumPolicy />
    97. snapshots>
    98. <id />
    99. <name />
    100. <url />
    101. <layout />
    102. pluginRepository>
    103. pluginRepositories>
    104. profile>
    105. profiles>
    106. <activeProfiles>
    107. <activeProfile>env-testactiveProfile>
    108. activeProfiles>
    109. settings>

    三. mirrorOf 详解

        mirrorOf 可以理解“为某个仓库(repository)的做镜像”,填写的是repostoryId。* 的意思就是匹配所有的仓库(repository)。相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。

    在maven中配置一个mirror时,有多种形式:
    1. mirrorOf=“*”  // mirror一切,你配置的repository不起作用了。
    2. mirrorOf=my-repo-id // 镜像my-repo-id,你配置的my-repo-id仓库不起作用了。
    3. mirrorOf=*,!my-repo-id  // !表示非运算,排除你配置的my-repo-id仓库,其他仓库都被镜像了。就是请求下载my-repo-id的仓库的jar不使用mirror的url下载,其他都是用mirror配置的url下载。
    4. mirrorOf=external:*  // 如果本地库存在就用本地库的,如果本地没有,所有下载就用mirror配置的url下载。

  • 相关阅读:
    python实现FINS协议的TCP服务端(篇二)
    110道 MySQL面试题及答案 (持续更新)
    Redis设计与实现(七)| 发布 & 订阅
    PS怎么给GIF文字上加图片?
    Matlab图像处理-三基色
    hadoop集群中存在配置较低的数据节点应用如何应对磁盘数据溢满的问题之rebalance
    现代卷积网络实战系列3:PyTorch从零构建AlexNet训练MNIST数据集
    Python基础总结(一)
    2023年湘潭大学OJ作业1 XTU OJ 1063,1064,1065,1066,1067 2023年下学期《C语言》作业0x00-输入输出
    Spring AOP 动态代理
  • 原文地址:https://blog.csdn.net/mrluo735/article/details/134419997