公司营销网站制作,汕头制作网站软件,南京响应式网站制作,河北邢台新河网1、配置文件
maven的配置文件主要有 settings.xml 和pom.xml 两个文件。
其中在maven安装目录下的settings.xml#xff0c;如#xff1a;D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件
用户目录的.m2子目录下的settings.xml#xff0c;如#…1、配置文件
maven的配置文件主要有 settings.xml 和pom.xml 两个文件。
其中在maven安装目录下的settings.xml如D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件
用户目录的.m2子目录下的settings.xml如C:\Users\chenxc.m2\settings.xml 配置只是针对当前用户的配置文件。
项目根路径下的pom.xml主要是对当前项目的配置。
局部配置优先于全局配置。 配置优先级从高到低pom.xml user settings global settings
2、settings.xml 配置详解
2.1、localRepository 本地仓库配置 该值是此构建系统的本地存储库的路径。默认值为 ${user.home}/.m2/repository。此元素对于主构建服务器特别有用允许所有登录用户从公共本地存储库进行构建。
localRepositoryD:\repository/localRepository 2.2、interactiveMode 用户输入配置 interactiveMode元素用于配置Maven是否在需要用户输入时进入交互模式。默认情况下Maven设置为true这意味着它会在需要输入时提示用户。 如果你想要Maven在需要输入时总是自动做出决定或者永远不要提示用户你可以将interactiveMode设置为false。
interactiveModetrue/interactiveMode
2.3、offline 离线模式 表示此构建系统是否应在离线模式下运行则默认为false。 此元素对于由于网络设置或安全原因而无法连接到远程存储库的构建服务器非常有用。
offlinefalse/offline
2.4、pluginGroups 插件组 插件组该元素包含一个元素列表pluginGroup每个元素包含一个groupId。当使用插件且命令行中未提供 groupId 时将搜索该列表。该列表默认包含 org.apache.maven.plugins和org.codehaus.mojo。
pluginGroupspluginGrouporg.eclipse.jetty/pluginGroup
/pluginGroups
如下在pom文件中没有设置groupId那么将会从pluginGroups列表中指定的位置搜索插件
!-- 打包跳过测试 --
plugin!-- groupIdorg.apache.maven.plugins/groupId --artifactIdmaven-surefire-plugin/artifactIdconfigurationskipTeststrue/skipTests/configuration
/plugin
2.5、servers 私服服务器配置 私服服务器配置配置私服的用户名和密码。配置的私服服务器可以用来发布jar包与pom 中 distributionManagement 标签中配置的仓库ID相互对应。
serversserveridserver001/idusernamemy_login/usernamepasswordmy_password/passwordprivateKey${user.home}/.ssh/id_dsa/privateKeypassphrasesome_passphrase/passphrase!--文件被创建时的权限。 --filePermissions664/filePermissions!--目录被创建时的权限。 --directoryPermissions775/directoryPermissionsconfiguration/configuration/server
/serversid 该id与distributionManagement中repository元素的id相匹配注意不是用户登陆的id。 如下在pom文件中设置的distributionManagement中repository元素的id要与settings.xml文件中server的id值一致才能匹配的上。
distributionManagementrepositoryidserver001/idurlhttp://url:端口/repository/maven//url/repository
/distributionManagement
username、password这两元素以一对形式出现表示向该服务器进行身份验证所需的登录名和密码。privateKey、passphrase与前两个元素一样指定了一个私钥位置默认是${user.home}/.ssh/id_dsa以及私钥密码私钥密码可以没有。将来passphrase和password元素可能会被提取到外部但目前它们必须在settings.xml文件以纯文本的形式声明。filePermissions、DirectoryPermissions在部署时创建存储库文件或目录时这些是要使用的权限。每个的合法值都是与 unix 文件权限相对应的三位数例如 664 或 775。
注意如果您使用私钥privateKey登录服务器请确保没有填写password元素。否则privateKey将被忽略。
2.6、mirrors 镜像配置
mirrorsmirroridplanetmirror.com/idnamePlanetMirror Australia/nameurlhttp://downloads.planetmirror.com/pub/maven2/urlmirrorOfcentral/mirrorOf/mirror
/mirrorsid , name此镜像的唯一标识、定义一个容易看懂的名称。id用于区分镜像元素并在连接到镜像时从servers部分选择相应的凭据。url 该镜像的基本 URL。当Maven在建立系统的时候就会使用这个url来连接到我们的远程仓库。mirrorOf用来表示该mirror是关联的哪一个仓库其值为其关联仓库的id。例如要指向 Mavencentral存储库 ( https://repo.maven.apache.org/maven2/) 的镜像请将此元素设置为 central。更高级的映射如下 当要同时关联多个仓库时多个仓库之间可以用逗号隔开当要关联所有的仓库时可以使用“*”表示当要关联除某一个仓库以外的其他所有仓库时可以表示为“ ,!repositoryId”当要关联不是localhost或用file请求的仓库时可以表示为“external:”。
2.7、proxies 代理设置 代理设置内部由n个proxy节点组成表示Maven在进行联网时需要使用到的代理。 部分公司出于安全考虑会需要员工通过代理才可上网这时就需配置该节点的参数了。
proxiesproxyidmyproxy/idactivetrue/activeprotocolhttp/protocolhostproxy.somewhere.com/hostport8080/portusernameproxyuser/usernamepasswordsomepassword/passwordnonProxyHosts*.google.com|ibiblio.org/nonProxyHosts/proxy
/proxiesid唯一标识符active是否被激活使用默认为true。当有多个proxy节点存在时用于选择使用哪个代理但同一时间仅有一个代理会被被激活protocol协议类型username用户名没有可不填password密码没有可不填hostIP地址port端口号nonProxyHosts不使用代理的地址
以上参数在通常配置代理的情况都会使用到最终的代理地址为 protocol://host:port
2.8、profiles 个性配置 个性配置内部由n个profile节点组成。setting.xml文件中的profile是pom中的profile的其中一部分profile里包含activation、 repositories、pluginRepositories、properties这四个主要元素。因为它们关注的是整个构建系统这就是settings.xml文件的作用而不是单个项目对象模型设置。如果一个settings.xml中的profile被激活它的值会覆盖任何其它定义在pom中带有相同id的profile。
profilesprofileidtest/id.../profile
/profiles参数说明
id唯一标识符activation激活条件。properties用于定义属性键值对的。repositories远程仓库列表。pluginRepositories插件仓库。
2.8.1、activation 激活条件 activation是用来确定该profile是否被激活使用当profile被激活的时候 repositories、pluginRepositories、properties这三个元素里的配置才生效。所以activation这个元素要至少要和其他三个元素之一同时使用才有意义。
profilesprofileidtest/idactivationactiveByDefaultfalse/activeByDefaultjdk1.5/jdkosnameWindows XP/namefamilyWindows/familyarchx86/archversion5.1.2600/version/ospropertynamemavenVersion/namevalue2.0.3/value/propertyfileexists${basedir}/file2.properties/existsmissing${basedir}/file1.properties/missing/file/activation.../profile
/profilesactiveByDefaultprofile默认是否激活的标识。jdk 当运行的java程序的jdk的版本与指定的版本匹配时profile将被激活。如上面的例子中当运行的java程序的jdk版本为1.5.0_06时profile将被激活。jdk的版本还支持范围配。 有关支持范围匹配的更多详细信息请参阅 maven-enforcer-plugin 。os该os元素可以定义上面所示的一些操作系统特定属性。 当满足条件时profile将被激活。 name操作系统的名字匹配则激活该profile。family操作系统所属家族则激活该profile。arch操作系统体系结构则激活该profile。version操作系统版本则激活该profile。property如果Maven检测到对应的namevalue对的属性其值可以在pom中通过${name}引用则profile将激活。如果值字段是空的那么存在属性名称字段就会激活profile如上面例子中如果存在mavenVersion2.0.3那么profile将激活。file通过给定的文件存在或丢失来激活profile exists如果指定的文件存在则激活profile。missing如果指定的文件不存在则激活profile。 注意这多个激活条件的关系是这样的Maven 3.2.2之前是只要满足其中之一就可以激活该profileMaven 3.2.2之后是满足所有才可以激活该profile。
2.8.2、properties 扩展属性列表 对应profile的扩展属性列表。可以用来存放一些值。这些值可以在pom文件中的任何地方使用标记${X}来使用这里X是指属性的名称如下例中的${user.install}。
profilesprofile...propertiesuser.install${user.home}/our-project/user.install/properties.../profile
/profiles属性的值有五种不同的形式:
env.X : 在一个变量前加上env.的前缀会返回一个shell环境变量。例如env.PATH指代了$path环境变量在Windows上是%PATH%。project.x 指代了pom中对应的元素值。例如: projectversion1.0/version/project通过${project.version}获得version的值。settings.x : 指代了settings.xml中对应元素的值。例如settingsofflinefalse/offline/settings通过${settings.offline}获得offline的值。java系统属性 : 所有可通过java.lang.System.getProperties()获取的属性都能在pom中使用该形式获取例如 ${java.home}。x : 在properties/元素中或者外部文件中设置以${someVar}的形式使用。 如果我们想在application.peoperties文件中引用这个user.install属性这里注意引用时要用占位符 user.installuser.install 在springboot工程中只能使用xxxxxx为自定义的属性名 2.8.3、repositories 远程仓库列表
远程仓库列表它是Maven用来填充构建系统本地仓库所使用的一组远程仓库列表。
profilesprofile...repositoriesrepositoryidcodehausSnapshots/idnameCodehaus Snapshots/namereleasesenabledfalse/enabledupdatePolicyalways/updatePolicychecksumPolicywarn/checksumPolicy/releasessnapshotsenabledtrue/enabledupdatePolicynever/updatePolicychecksumPolicyfail/checksumPolicy/snapshotsurlhttp://snapshots.maven.codehaus.org/maven2/urllayoutdefault/layout/repository/repositories.../profile/profilesid、name远程仓库唯一标识和远程仓库名称releases、snapshots如何处理远程仓库里发布版本releases和快照版本snapshots的下载 enabledtrue或者false表示该仓库是否开启下载某种类型构件发布版快照版。updatePolicy该元素指定更新发生的频率。Maven会比较本地pom 和远程pom 的时间戳。这里的选项是always一直daily默认每日intervalX这里X是以分钟为单位的时间间隔或者never从不。checksumPolicy当Maven验证构件校验文件失败时该怎么做-ignore忽略fail失败或者warn警告。layout在上面对存储库的描述中提到它们都遵循通用布局。这基本上是正确的。Maven 2 的存储库有一个默认布局然而Maven 1.x 有不同的布局。使用此元素指定是default默认还是legacy遗留。
2.8.4、pluginRepositories 插件仓库 在Maven中有两种类型的仓库一种是存储工件的仓库另一种就是存储plugin插件的仓库。pluginRepositories的定义和repositories的定义类似它表示Maven在哪些地方可以找到所需要的插件。
profilesprofile...pluginRepositoriespluginRepositoryidmyPluginRepo/idnameMy Plugins repo/namereleasesenabledtrue/enabled/releasessnapshotsenabledfalse/enabled/snapshotsurlhttps://maven-central-eu....com/maven2//url/pluginRepository/pluginRepositories.../profile/profiles2.9、activeProfiles 激活的profile 它包含一组activeProfile元素每个元素的值都是一个profile中id里的值。无论任何环境设置如何activeProfile定义的任何profile都将处于活动状态。如果没有找到匹配的配置文件则不会发生任何事情。和activation 配置相比 activeProfiles 配置比较简单也比较常用。
activeProfilesactiveProfileenv-test/activeProfile
/activeProfiles3、pom.xml配置文件
parent!--父项目的构件标识符 --artifactId /!--父项目的唯一标识符 --groupId /!--父项目的版本 --version /!-- 父项目的pom.xml文件的相对路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom其次在文件系统的这个位置relativePath位置然后在本地仓库最后在远程仓库寻找父项目的pom。 注意如果在父项目中通过modules指定了子模块且子模块在父项目目录下则不需要指定此配置。如果子项目不在父项目的目录下应该指定此配置。--relativePath../pom.xml/relativePath
/parent!-- 模型版本 --
modelVersion4.0.0/modelVersion
!-- 公司或者组织的唯一标志--
groupIdcom.companyname.project-group/groupId
!-- 项目的唯一ID-
artifactIdproject/artifactId
!-- 版本号 --
version1.0/version!--项目产生的构件类型例如jar、war、ear、pom --
packagingjar/packaging!-- 属性配置 --
properties!-- 编译时的编码 --maven.compiler.encodingUTF-8/maven.compiler.encodingspring-boot.version2.3.7.RELEASE/spring-boot.version
/properties
!-- 依赖配置 --
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdversion${spring-boot.version}/versionscopecompile/scope/dependency
/dependencies
!-- 依赖声明不会真正引入包。一般在父pom中进行声明在子pom中真正引入 --
dependencyManagementdependencies!-- import 依赖范围使用要求: 1、打包类型必须是pom 2、必须放在 dependencyManagement 中 --!-- 以下示例在项目中引入 SpringBoot、SpringCloud 依赖 --!-- SpringCloud 微服务 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency !-- SpringCloud Alibaba 微服务 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency!-- runtime专门用于编译时不需要但是运行时需要的jar包。比如编译时我们根据接口调用方法但是实际运行时需要的是接口的实现类。典型案例是 --!--热部署 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-core/artifactIdversion${hutool.version}/version/dependency/dependencies
/dependencyManagement !-- 编译构建相关配置 --
build!-- 插件申明一般在父pom中声明在子pom中真正引入 --pluginManagementpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/version/plugin/plugins/pluginManagement!-- 插件引入在父pom中引入以后所有子pom中都会引入 --pluginsplugingroupIdorg.sonarsource.scanner.maven/groupIdartifactIdsonar-maven-plugin/artifactIdversion3.6.0.1398/version/plugin/plugins
/build !-- 针对当前项目的远程仓库配置 --
repositoriesrepositoryidaliyun-public/idurlhttps://maven.aliyun.com/repository/public/urlsnapshotsenabledfalse/enabled/snapshotsreleasesenabledtrue/enabled/releases/repository
/repositories
!-- 针对当前项目的远程插件仓库配置 --
pluginRepositoriespluginRepositoryidaliyun-public/idurlhttps://maven.aliyun.com/repository/public/urlsnapshotsenabledfalse/enabled/snapshotsreleasesenabledtrue/enabled/releases/pluginRepository
/pluginRepositories!--jar包发布私服配置--
distributionManagement!--发布版本--repository!-- 此ID和setting.xml 中server中配置的服务器进行对应 --idmaven-releases/idnamereleases/nameurlhttp://nexus.maven.cn/repository/maven-releases//urluniqueVersiontrue/uniqueVersion/repository!--快照版本--snapshotRepositoryidmaven-snapshots/idnamesnapshots/nameurlhttp://nexus.maven.cn/repository/maven-snapshots//url/snapshotRepository
/distributionManagement!--动态构建配置通过设置活动的profileprofile中的配置会作用于当前的项目编译构建 --
profilesprofileiddev/idpropertiesspring.profiles.activedev/spring.profiles.active/propertiesactivationactiveByDefaulttrue/activeByDefault/activation/profileprofileidprod/idpropertiesspring.profiles.activeprod/spring.profiles.active/properties/profile
/profiles4、远程仓库的加载 maven仓库依赖下载顺序在settings.xml文件中配置的本地仓库中寻找依赖没找到则进入第2步。在settings.xml文件中配置的全局远程仓库中寻找没找到则进入第3步。在当前项目的pom.xml中配置的远程仓库中寻找如果没找到则进入第4步。在中央仓库 https://repo.maven.apache.org/maven2 中寻找如果没找到则抛出依赖无法加载异常。
镜像替换
如果在找寻的过程中如果发现该仓库有镜像匹配则直接从镜像仓库中加载。如果仓库的 id 设置成 mirrorOfcentral/mirrorOf则会覆盖 maven 的中央仓库配置。如果镜像 ID 设置为 mirrorOf*/mirrorOf 表示匹配所有的仓库则所有依赖只从此镜像仓库中下载。如果镜像ID 设置为 mirrorOfrepo1,repo2/mirrorOf则匹配仓库repo1和repo2使用逗号分隔多个远程仓库如果镜像ID设置为 mirrorOf*,!repo1/miiroOf匹配所有远程仓库repo1除外使用感叹号将仓库从匹配中排除 建议将镜像地址作为一个 普通仓库repository 进行配置这样可以在其他 仓库下载不了的情况下查找到此仓库。如果配置了镜像仓库代替其他仓库容易出现在镜像中找不到依赖导致项目无法编译的问题。