maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性

利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

localRepository

用于指定存储jar包的路径,换句话说就是本地仓库地址,如果不设置默认是${user.home}/.m2/repository 。${user.home}是系统环境变量

  1. <localRepository>E:/.m2</localRepository>

interactiveMode

表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。

  1. <interactiveMode>true</interactiveMode>

offline

表示Maven是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为true,默认为false。当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,我们就可以设置成false,这样安全

  1. <offline>false</offline>

pluginGroups

  • 元素里包含了一个pluginGroup列表。默认maven中有org.apache.maven.pluginsorg.codehaus.mojo两个pluginGroup。表示当通过plugin的前缀来解析plugin的时候到哪里寻找。pluginGroup元素指定的是plugin的groupId
  • 如下使我们在pom文件中配置的一个插件,我们配置的坐标中并没有指定groupId,熟悉maven的都知道我们引入以来至少需要groupId和artifactId的。但是下面的插件中没有。这个时候maven就会获取pluginGroupspluginGroup列表和配置中artifactId进行一一匹配。匹配到下载。这里如果出现重复也没关系,我们使用的时候使用对了就行了。
  1. <plugins>
  2. <plugin>
  3. <artifactId>maven-compiler-plugin</artifactId>
  4. <configuration>
  5. <source>1.7</source>
  6. <target>1.7</target>
  7. </configuration>
  8. </plugin>
  9. <plugin>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-maven-plugin</artifactId>
  12. </plugin>
  13. </plugins>

proxies

其下面可以定义一系列的proxy子元素,表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用

  1. <proxies>
  2. <!--代理元素包含配置代理时需要的信息-->
  3. <proxy>
  4. <!--代理的唯一定义符,用来区分不同的代理元素。-->
  5. <id>myproxy</id>
  6. <!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。 -->
  7. <active>true</active>
  8. <!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。-->
  9. <protocol>http</protocol>
  10. <!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
  11. <host>proxy.somewhere.com</host>
  12. <!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
  13. <port>8080</port>
  14. <!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 -->
  15. <username>proxyuser</username>
  16. <!--代理的密码,用户名和密码表示代理服务器认证的登录名和密码。 -->
  17. <password>somepassword</password>
  18. <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。-->
  19. <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
  20. </proxy>
  21. </proxies>

servers

  • 配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中
  1. <servers>
  2. <!--服务器元素包含配置服务器时需要的信息 -->
  3. <server>
  4. <!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。-->
  5. <id>server001</id>
  6. <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
  7. <username>my_login</username>
  8. <!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面-->
  9. <password>my_password</password>
  10. <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 -->
  11. <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
  12. <!--鉴权时使用的私钥密码。-->
  13. <passphrase>some_passphrase</passphrase>
  14. <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
  15. <filePermissions>664</filePermissions>
  16. <!--目录被创建时的权限。 -->
  17. <directoryPermissions>775</directoryPermissions>
  18. </server>
  19. </servers>

使用方法

  • 我们在项目的pom中配置了发布属性 distributionManagement是部署到远程的配置标签。这个标签将在maven的pom章节讲
  1. <distributionManagement>
  2. <repository>
  3. <id>release-repository</id>
  4. <name>Release Repository</name>
  5. <url>http://www.myrepository.com/repositories/releases</url>
  6. </repository>
  7. <snapshotRepository>
  8. <id>snapshot-repository</id>
  9. <name>Snapshot Repository</name>
  10. <url>http://www.myrepository.com/repositories/snapshots</url>
  11. </snapshotRepository>
  12. </distributionManagement>
  • 上面配置了SNAPSHOT包的上传路径和RELEASE包的上传远程地址,但是我们的这个远程地址有权限,最基本的就是需要账号和密码。这个时候我们不能暴露在项目中,我们就可以在maven的setting中设置了,就是通过servers标签实现,

    1. <servers>
    2. <server>
    3. <id>snapshot-repository</id>
    4. <username>snapshot</username>
    5. <password>123456</password>
    6. </server>
    7. <server>
    8. <id>release-repository</id>
    9. <username>release</username>
    10. <password>123456</password>
    11. </server>
    12. </servers>
  • 注意一点两边的id必须匹配才可以。 maven对密码进行加密处理

mirrors

  • 为仓库列表配置的下载镜像列表。高级设置请参阅镜像设置页面,用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件的时候所使用的远程仓库。但是有时候这个远程仓库会比较忙,所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载,这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。

    • id:是用来区别mirror的,所有的mirror不能有相同的id

    • mirrorOf:用来表示该mirror是关联的哪一个仓库,其值为其关联仓库的id。当要同时关联多个仓库时,这多个仓库之间可以用逗号隔开;当要关联所有的仓库时,可以使用“”表示;当要关联除某一个仓库以外的其他所有仓库时,可以表示为“,!repositoryId”;当要关联不是localhost或用file请求的仓库时,可以表示为“external:*”。

    • url:表示该镜像的url。当Maven在建立系统的时候就会使用这个url来连接到我们的远程仓库。

  1. <mirrors>
  2. <!--给定仓库的下载镜像。 -->
  3. <mirror>
  4. <!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
  5. <id>planetmirror.com</id>
  6. <!--镜像名称 -->
  7. <name>PlanetMirror Australia</name>
  8. <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
  9. <url>http://downloads.planetmirror.com/pub/maven2</url>
  10. <!--被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。-->
  11. <mirrorOf>central</mirrorOf>
  12. </mirror>
  13. </mirrors>

profiles

  • 用于指定一系列的profile。profile元素由activation、repositories、pluginRepositories和properties四个元素组成。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile。

使用场景

  • profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。具体的激活条件有哪些我在后文会讲到

出现位置

  • 针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。

  • 针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

  • 全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的

激活方式

  • 激活方式才是profiles运用的几种表现,我们通过这些激活方式灵活实现部署到不同的环境中,对于不同的满足条件我们提供不同的profile,profile我们有不同的配置,这样就实现了部署的灵活性

    • 参数激活

    如下我们配置了两个profile(zxh1,zxh2),两个profile除了标识id还配置了参数properties.分别表示当属性zxhtom值为single、double该激活的profile。

  1. ```
  2. <profiles>
  3. <profile>
  4. <id>zxh1</id>
  5. <properties>
  6. <zxhtom>single</zxhtom>
  7. </properties>
  8. </profile>
  9. <profile>
  10. <id>zxh2</id>
  11. <properties>
  12. <zxhtom>double</zxhtom>
  13. </properties>
  14. </profile>
  15. <profiles>
  16. ```
  17. + 环境激活
  18. 在部署是符合这些环境要求的电脑则会获取到该profile的配置。这样我们windows上配置和Linux上就不同了。
  19. ```
  20. <activation>
  21. <os>
  22. <!--激活profile的操作系统的名字 -->
  23. <name>Windows 7</name>
  24. <!--激活profile的操作系统所属家族(如 'windows') -->
  25. <family>Windows</family>
  26. <!--激活profile的操作系统体系结构 -->
  27. <arch>x64</arch>
  28. <!--激活profile的操作系统版本-->
  29. <version>x.x.x..</version>
  30. </os>
  31. </activation>
  32. ```
  33. + 默认激活
  34. * activeByDefault激活
  35. 下面的配置在我们部署是没有指定profile时,zxh1这个profile就会成为默认的profile,如果我们指定了那么zxh1就不会被启用。这里要注意这里是不启用。和后面的activeProfiles激活不同。
  36. ```
  37. <profiles>
  38. <profile>
  39. <id>zxh1</id>
  40. <properties>
  41. <zxhtom>single</zxhtom>
  42. </properties>
  43. <activation>
  44. <activeByDefault>true</activeByDefault>
  45. </activation>
  46. </profile>
  47. <profile>
  48. <id>zxh2</id>
  49. <properties>
  50. <zxhtom>double</zxhtom>
  51. </properties>
  52. </profile>
  53. </profiles>
  54. ```
  55. * activeProfiles激活
  56. 如下图中我们定义zxh1为激活状态,另外我们如果在通过参数或者其他条件激活了zxh2,这里zxh1zxh2都是出于激活的,并不像activeByDefault激活那样直接停止了。而是两者的覆盖值合并。
  57. ```
  58. <profiles>
  59. <profile>
  60. <id>zxh1</id>
  61. <properties>
  62. <zxhtom>single</zxhtom>
  63. </properties>
  64. </profile>
  65. <profile>
  66. <id>zxh2</id>
  67. <properties>
  68. <zxhtom>double</zxhtom>
  69. </properties>
  70. </profile>
  71. <profiles>
  72. <activeProfiles>
  73. <activeProfile>zxh1</activeProfile>
  74. </activeProfiles>
  75. ```
  76. 档如下在activeProfiles中配置了多个profile是,maven选择的是后者覆盖合并前者的方式,也就是将zxh1zxh2合并,相同值去后者的值。
  77. ```
  78. <profiles>
  79. <profile>
  80. <id>zxh1</id>
  81. <properties>
  82. <zxhtom>single</zxhtom>
  83. </properties>
  84. </profile>
  85. <profile>
  86. <id>zxh2</id>
  87. <properties>
  88. <zxhtom>double</zxhtom>
  89. </properties>
  90. </profile>
  91. <profiles>
  92. <activeProfiles>
  93. <activeProfile>zxh1</activeProfile>
  94. <activeProfile>zxh2</activeProfile>
  95. </activeProfiles>
  96. ```
  97. + 文件激活
  98. ```
  99. <activation>
  100. <file>
  101. <!--如果指定的文件存在,则激活profile。 -->
  102. <exists>${basedir}/file2.properties</exists>
  103. <!--如果指定的文件不存在,则激活profile。-->
  104. <missing>${basedir}/file1.properties</missing>
  105. </file>
  106. </activation>
  107. ```

鲜为人知的maven标签解说的更多相关文章

  1. Maven 标签详解

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  2. maven 标签classifier 研究一下

    研究一下maven的标签: <dependency> <groupId>io.netty</groupId> <artifactId>netty-tcn ...

  3. maven标签说明

    <project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/2 ...

  4. Maven 标签

    scope 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖.打包的时候通常需要包含进去 2.test:依赖项目仅仅参与测试相 ...

  5. maven 标签: 项目管理软件 2016-09-11 22:29 323人阅读 评论(24) 收藏

    开始接触itoo的java项目之后,也就开始接触maven,搭建环境中有一个步骤是配置maven和jboss,当时知道jboss是用来部署我们的项目的,但是maven就只知道一个更新maven,那么, ...

  6. maven 标签 关于<import>标签

      标签用途:在dependecyManagement元素下用,合并此import标签上级dependency的groupId和artid中指向依赖的dependecyManagement内容   标 ...

  7. [Maven]Maven入门教程

    概念 Maven是什么 Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本 maven有自己的版本定义和规则 构建 maven支持许多种的应用程序类型,对于每一种支持的应 ...

  8. 使用国内 maven 镜像 代替国外 mirror

    使用maven的都知道国外的maven下载一个是比较慢,一个是因为被墙,一些jar包无法下载,非常老火. 比如出现类似下面的错误: Unknown host repo.maven.apache.org ...

  9. struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)

    课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...

随机推荐

  1. WordPress教程之如何入门WordPress

    这篇文章将介绍如何设置 WordPress,并自定义其基本功能.WordPress 的安装包相对较小(低于 10 MB),非常易于安装和管理.为了托管自己的网站,你可以获得几个不同的选项. 你可以通过 ...

  2. springboot2.x纯注解整合dubbo

    springboot1.x和springboot2.x整合差距挺大的,基于最新的2.x进行整合,使用纯注解的方式 依赖选取 首先pom文件的依赖引入,maven仓库有Apache和alibaba两个 ...

  3. C++学习书籍推荐《More Exceptional C++(英文)》下载

    百度云及其他网盘下载地址:点我 作者简介 Herb Sutter is the author of three highly acclaimed books, Exceptional C++ Styl ...

  4. 不要天真了,这些简历HR一看就知道你是培训的,质量不佳的那种

    上到职场干将下到职场萌新,都会接触到包装简历这个词语.当你简历投到心仪的公司,公司内负责求职的工作人员是如何甄别简历的包装程度的?Jason 老师根据自己的经验写下了这篇文章,谁都不是天才,包装无可厚 ...

  5. Java 将Word转为PDF、PNG、SVG、RTF、XPS、TXT、XML

    同一文档在不同的编译或阅读环境中,需要使用特定的文档格式来打开,通常需要通过转换文档格式的方式来实现.下面将介绍在Java程序中如何来转换Word文档为其他几种常见文档格式,如PDF.图片png.sv ...

  6. (转)代码结构中Dao,Service,Controller,Util,Model是什么意思?

    作者:技能树IT修真院链接:https://www.zhihu.com/question/58410621/answer/623496434来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  7. 批量替换git目录的远程仓库URL地址脚本

    需求: 1. 输入work-dir 工作目录 2. 扫描工作目录中的子目录 3. 对每一个子目录, 判断是否是git repo 4. 确认是git repo, 获取git origin remote- ...

  8. Your project specifies TypeScriptToolsVersion 2.3, but a matching compiler ...... 出现这种警告解决方式

  9. canvas动画:气泡上升效果

    HTML5中的canvas真是个很强大的东西呢! 这几天突发奇想想做一个气泡上升的动画,经过许久的思考和多次失败,终于做出了如下效果 由于是录制的gif图,看着会有点卡顿,实际演示是很自然的 想要做出 ...

  10. Python教程资源

    链接:https://pan.baidu.com/s/1zcCG4KJ8p4GI-x2c6PY2Ng 提取码:n2q2