Maven初解(天池大赛半决赛学习进程-1)

maven 基本配置

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从central(中央)信息管理项目的构建,报告和文档。

Maven是意第绪语,意为知识的累积者,最初是为了简化Jakarta Turbine项目中的构建过程。有几个项目,每个项目都有自己的Ant构建文件,所有项目都略有不同,JAR已签入CVS。我们想要一种标准的方式来构建项目,清晰地定义项目的组成,一种简单的方式来发布项目信息以及一种在多个项目之间共享JAR的方式,是一个可以用于构建和管理任何基于Java的项目的工具。

简单值的配置

顶层的settings元素中定义了一些项目中的全局值


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>${user.home}/.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  <offline>false</offline>
  ...
</settings>

localRepository:

表示构建系统的本地存储库的路径 默认值为${user.home}/.m2/repository

使主服务器允许所有登录的用户建立一个共同的本地存储库。

interactiveMode:

maven是否应该尝试于用户进行输入交互

true 为允许 false为不允许, 默认为true

offline:

是否允许在脱机模式下运行,默认为false

pluginGroups的配置

此元素包含pluginGroup元素的列表,每个元素都包含一个groupId

当使用插件且命令行中未提供groupId时,将搜索该列表。

此列表自动包含 org.apache.maven.pluginsorg.codehaus.mojo

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <pluginGroups>
    <pluginGroup>org.eclipse.jetty</pluginGroup>
  </pluginGroups>
  ...
</settings>

例如, 按照上面的Maven设置,在命令行可以执行org.eclipse.jetty:jetty-maven-plugin:run的裁剪命令(简略命令):

mvn jetty:run

Servers的配置

通过POM的存储库和分发管理元素定义下载和部署仓库,但是,某些安全设置(如用户名和密码)不应出现在pom.xml文件中,应该放在构建服务器上的setting.xml中。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <servers>
    <server>
      <id>server001</id>
      <username>my_login</username>
      <password>my_password</password>
      <privateKey>${user.home}/.ssh/id_dsa</privateKey>
      <passphrase>some_passphrase</passphrase>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
  </servers>
  ...
</settings>

id:

这是服务器的id而不是登录用户的id,与Maven尝试连接的repository(存储库)/mirror(镜像)的id元素相匹配

username:

服务器进行身份验证所需的登录名(username 和 password 成对存在,不能单独存在)

password:

服务器进行身份验证所需的密码

privateKey:

指定私钥的路径(默认为${user.home}/.ssh/id_dsa)

passphrase:

指定私钥密码的路径

filePermissions:

部署时创建存储库文件的权限

directoryPermissions:

部署时创建目录的权限

filePermissionsdirectoryPermissions这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。

**注意:**如果你使用私钥登陆服务器,确保你已经没有定义 <password>, 否则 <password>将被忽略

Password Encryption(密码加密)

2.1.0+版本以后增加了服务器加密和私钥加密的功能,官网的介绍

Mirrors(镜像)的配置

阿里云镜像


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>aliyun-maven</id>
      <name>aliyun-public</name>
      <url>https://maven.aliyun.com/repository/public</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

表示仓库镜像列表

示例配置


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

id:

仓库镜像的唯一标识符,用于区分不同的镜像,并从server中选择对应的凭证

name:

镜像的名称

url:

镜像URL地址,构建系统将使用此URL连接到存储库,而不是原始存储库URL。

mirrorOf:

镜像站的服务器id,例如指向中央存储库的镜像(https://repo.maven.apache.org/maven2/),mirrorOf设置为central。注:必须与镜像的id不同。 官网详细的解释.

Proxies(代理)的设置

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <proxies>
    <proxy>
      <id>myproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
    </proxy>
  </proxies>
  ...
</settings>

id:

作为proxy 的唯一标识,用于区分不同的proxy

active:

代理是否是活动状态,true为激活状态。注:一个时刻只能有一个代理能处于活动状态

protocol, host, port:

代理的协议。例如: protocol://host:port,分隔成离散的元素以方便配置。

username:

代理服务器认证的用户名

password:

代理服务器认证的密码

nonProxyHosts:

不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。

Profiles

根据环境参数来调整构建配置的列表。settings.xml中的profilepom.xmlprofile的裁剪(简略)版本,包含了idactivation, repositories, pluginRepositoriesproperties

这里的profile只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。

如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同idprofile

Activation

自动触发profile的条件逻辑,Activation是profile的开启钥匙。像pom的概要文件一样,概要文件的功能来自它仅在某些情况下修改某些值的能力;这些情况是通过activation元素指定的。


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <profiles>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      ...
    </profile>
  </profiles>
  ...
</settings>

当满足所有指定的条件(尽管不是一次需要所有条件)时,会发生激活。

jdk:

activation在jdk元素中有一个内置的、以Java为中心的检查。如果测试是在与给定前缀匹配的jdk版本号下运行的,那么这将被激活。例如,1.5激活JDK1.4,1.5.0_2,而!1.5激活所有版本不是以1.5开头的JDK。Ranges 也被支持,请参考 maven-enforcer-plugin

os:

os元素可以定义上面显示的某些操作系统特定属性

property:

如果Maven检测到某一个属性(其值可以在POM中通过${name}引用),其拥有对应的name = value键值对,Profile就会被激活。如果值字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段。

file:

提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。

activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profileidprofile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。

要查看在某个构建中将激活哪个概要文件,请使用maven-help-plugin,命令如下:

mvn help:active-profiles

Properties

对应profile的扩展属性列表。Maven属性是值占位符和Ant中的属性一样,可以用来存放一些值。这些值通过标记${X}在POM中的任何地方来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问:

  1. env.X: 在一个变量前加上env.的前缀,会返回一个shell环境变量。例如,${env.PATH}指代了 $path 环境变量(在Windows上是%PATH%)。
  2. project.x:pom中用.标记的路径指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。
  3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。
  4. Java System Properties:所有属性都可以在POM中通过java.lang.System.getProperties()访问,例如${java.home}
  5. x:<properties/>元素或者外部文件中设置,该值可能以${someVar}的形式被使用。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <profiles>
    <profile>
      ...
      <properties>
        <user.install>${user.home}/our-project</user.install>
      </properties>
      ...
    </profile>
  </profiles>
  ...
</settings>

如果该profile被激活,则可以在POM中使用${user.install}访问。

Repositories

存储库是项目的远程集合,Maven使用这些集合填充构建系统的本地存储库。从这个本地Maven存储库,调用它的插件和依赖关系。不同的远程存储库可以包含不同的项目,在激活的profile中,它们可能会寻找一个匹配的发行版本或简要artifact。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>codehausSnapshots</id>
          <name>Codehaus Snapshots</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </snapshots>
          <url>http://snapshots.maven.codehaus.org/maven2</url>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        ...
      </pluginRepositories>
      ...
    </profile>
  </profiles>
  ...
</settings>

releases, snapshots

这些是针对每种类型的工件、发布或快照的策略。有了这两个集合,POM就可以在单个存储库中独立于其他类型更改每种类型的策略。例如,出于开发目的,可能决定只启用快照下载。

enabled:是否开启指定类型的存储策略,主要是针对releasessnapshots的进一步设置,true为启用

updatePolicy:该元素指定更新发生的频率,Maven会比较本地POM和远程POM的时间戳。选项: always, daily (default), interval:X or never.

checksumPolicy:当Maven将文件部署到存储库时,它还会部署相应的校验文件,校验文件缺失或者不正确的选项: ignorefailwarn

layout:用于定位和排序构件的仓库布局,可选:default(默认)或legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有不同的布局。

Plugin Repositories

存储库是两种主要类型的构件(artifacts)的地址。

第一种是作为其他构件的依赖项使用的构件,这些大部分都是驻留在central

另一种是插件。Maven插件本身就是一种特殊类型的构件。

Active Profiles


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <activeProfiles>
    <activeProfile>env-test</activeProfile>
  </activeProfiles>
</settings>

activeProfilessettings.xml的一大难题,activeProfiles包含一组activeProfile元素,每个元素都有一个profileid值。不管环境设置如何定义为activeProfile的任何profile id都处于活动状态,但是如果找不到匹配的配置文件,那么忽略它,然后正常运行。例如,如果env-testactiveProfile,则pom.xml文件(或profile.xml)中具有相应id的profile将被激活。如果没有找到这样的配置文件,那么执行将继续正常运行。

Maven 原型

Maven 原型 是由几个模块组成

ModuleDescription
maven-archetype-plugin原型插件使用maven原型
archetype-packaging定义原型声明周期和包
archetype-models描述类和参考文档
archetype-common核心类
archetype-testing组件内部使用maven原型来测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值