Maven 使用三——maven 配置

一、POM

pom(project object model)作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

pom 书写格式

下面看一下pom文件的书写格式:
在最外层有 project 根节点包着,其次是 pom的modelversion .
内层的设置主要有三部分。
1. 基本设置
Maven 使用三——maven 配置_第1张图片
Maven 使用三——maven 配置_第2张图片
2. 构建设置
这里写图片描述
3. 环境设置
Maven 使用三——maven 配置_第3张图片

节点说明:

project—- pom文件的顶级元素
modelVersion —–所使用的object model版本,为了确保稳定的使用,这个元素是强制性的。除非maven开发者升级模板,否则不需要修改
parent —–表示父pom
groupId —-是项目创建团体或组织的唯一标志符,通常是域名倒写,如groupId org.apache.maven.plugins就是为所有maven插件预留的
artifactId —–是项目artifact唯一的基地址名
packaging —-artifact打包的方式,如jar、war、ear等等。默认为jar。这个不仅表示项目最终产生何种后缀的文件,也表示build过程使用什么样的lifecycle。
version—– artifact的版本,通常能看见为类似0.0.1-SNAPSHOT,其中SNAPSHOT表示项目开发中,为开发版本
dependencies—- 表示依赖,在子节点dependencies中添加具体依赖的groupId artifactId和version
build 表示build配置
name 表示项目的展现名,在maven生成的文档中使用
url表示项目的地址,在maven生成的文档中使用
description 表示项目的描述,在maven生成的文档中使用。

坐标:其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。

依赖相关知识

依赖关系分类

pom的依赖关系主要为依赖,继承,聚合
三种关系的节点分别是:
依赖:dependency
继承:parent
聚合:modules
传递依赖 依赖中有一个传递依赖的概念,即A依赖B,B依赖C,那么A间接依赖C。不需要在A中声明对C的dependency了。
继承: A继承B那么,B中声明的依赖,在A中就会被继承过来。不过这里有一点值得说明,子类pom继承了父类pom的依赖还是依赖项的信息,跟声明的节点有关。如果父类中,是用dependentmanagement来声明的,那么父类只是管理的依赖项的版本等信息,子类要依赖的时候,需要显示声明,如果是dependencies,那么子类不需要显示声明,默认就已经依赖。
聚合 在一个pom中将多个相关的pom项目通过modules来组合声明,那么在打包,后者编译的时候,只需要执行一次就OK了。

依赖范围

关于项目依赖也有依赖的声明周期——scope

  1. compile (编译范围)
    compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。
  2. provided (已提供范围)
    provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
  3. runtime (运行时范围)
    runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
  4. test (测试范围)
    test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

  5. system (系统范围)
    system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

二、settings 配置

  1. 配置nexus 地址
    如果不配置nexues的地址,那么maven默认是会找到 central repository的,上篇博客中也说明了,为什么要结合nexus的使用,那么这篇我们就直接说如何连接到nexus。
    如果只是连接一个repository,那么我们可以直接使用节点:repository来进行设置。
    Maven 使用三——maven 配置_第4张图片
    但是我们需要的不仅仅是某一个repository ,因为nexus中存在group的概念,所以,我们利用这个group来管理多个repositories。把我们需要的repository通过一个地址来进行访问,统一入口,这里就用到了另一个节点 mirror。 它是repository的地址镜像,所有的 mirrolorof 中 的repository访问通过这里来进行,没有其他入口,
    如果镜像无法访问,其他也无法访问
    注意:这里改变的只是所有repository的访问地址,其他repository的设置还保持不变。
    Maven 使用三——maven 配置_第5张图片

  2. 配置发布jar权限
    我们如果想要deploy开发的jar包,首先需要开通这个设置,其实是需要拥有deploy的权限。

    1. 开通设置使用的是 distributionManagement。
      Maven 使用三——maven 配置_第6张图片
    2. 然后是开通权限
      Maven 使用三——maven 配置_第7张图片

以上两处的配置中的id信息要一致才行。
3. 配置repository信息
我们统一设置了mirror,改变了要访问repository的访问地址,但是我们还是可以对各自的repository进行独立设置其他属性的。这时候需要使用的是profiles 节点 + activeProfiles 节点。这两个节点必须配置使用,否则无效。并且两者的ID也必须对应上。
1. profiles
Maven 使用三——maven 配置_第8张图片
2. activeProfiles
这里写图片描述

好了,到这里 有关maven的基本配置,已经说完了。值得注意的一点是,有些配置是针对所有项目的,那么就应该放settings文件中,如果是针对某一个项目的,那就放到该项目的pom文件中。
大家多多指正。

你可能感兴趣的:(Maven 使用三——maven 配置)