Maven

  Maven 是一个项目管理和整合工具,能够管理项目的构建、报告和文档,为开发者提供了一套完整的构建生命周期框架。Maven 简化了工程的构建过程,并对其标准化。

 

一、安装配置

1. mvn命令:下载http://maven.apache.org/download.cgi;  添加环境变量M2_HOME 或MAVEN_HOME,并加到PATH变量中;  使用mvn –version检查

2. eclipse集成: Window→Preferences→Maven→Installations→Add 选择下载的maven目录; User settings修改为目录中的settings.xml配置文件

3. 启用代理访问: 去掉conf/settings.xml文件中proxy的注释,修改为实际的代理服务器。

二、Maven仓库

当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,然后按照以下顺序查找:本地资源库→中央仓库→远程仓库,如果都没有找到,那么Maven就会抛出异常。

1. 本地资源库(用来存储所有项目的依赖关系, 插件jar和其他文件): 修改settings.xml中的变量值localRepository为指定的本地目录

2. 中央仓库: Maven社区提供的仓库,其中包含了大量常用的库,是Maven默认配置的仓库。http://search.maven.org

3. 远程仓库:在pom.xml文件中设置repository

<!-- 添加JBoss远程仓库 -->
<project ...>
    <repositories>
      <repository>
    <id>JBoss repository</id>
    <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      </repository>
    </repositories>
</project>
View Code

 Maven依赖机制

  在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级。传统使用 Log4j需要手动下载jar包,并将其加入到项目依赖中。而使用Maven之需要配置log4j 的Maven 坐标, 当 Maven 编译或构建,log4j的 jar会自动下载,并把它放到 Maven本地存储库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。

<dependencies>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
    </dependency>
</dependencies>
View Code

当使用的 jar 不存在于 Maven的中心储存库中,可以手动复制下载的jar到本地仓库,或使用以下命令安装到本地仓库:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

 三、POM

代表项目对象模型,包含各种配置信息

POM 文件有三个必填字段: groupIdartifactIdversion,这三个元素组成了该项目在库中的标识符

groupId:表明其所属组织或公司及其所属项目,命名规则为组织或公司域名反转加项目名称。
artifactId:项目的模块名,通常与实际项目名称一致。模块的命名通常为项目名前缀加模块名。
version:当前项目的版本号。

packaging:定义项目的打包方式,可选值有jar、war、pom。默认为jar

dependencies元素包含了所有依赖的jar包,每一个jar包依赖使用dependency元素定义。 在声明一个jar包依赖时,除了指定groupId、artifactId、version这三项基本坐标外,还可以使用使用以下元素进行配置:
scope元素:指定依赖的范围

compile:(默认值)依赖在编译、测试、运行期间都有效。是一个比较强的依赖。打包的时候通常需要包含进去
test:依赖包仅仅参与测试相关的工作,包括测试代码的编译和执行,但不会被打包,例如:junit
provided:相当于compile,但是打包阶段做了exclude操作,运行期间不会使用这个依赖。例如servlet-api,在运行时容器已经提供,不需要再重复引入。
runtime:表示被依赖项目无需参与项目的编译,只用于运行和测试。例如JDBC驱动,适用运行和测试阶段
system:和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

exclusions元素:排除传递性依赖

  所有的 POM 都继承自一个父 POM(Super POM),它包含了一些可以被继承的默认设置。它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。可以使用命令查看Super POM的默认配置:mvn help:effective-pom,该文件设置了默认的工程源码目录结构、输出目录、需要的插件、仓库和报表目录。Super POM配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
<!--                                                                   -->
<!-- ================================================================= -->

<!-- ================================================================= -->
<!--                                                                   -->
<!-- Effective POM for project                                         -->
<!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
<!--                                                                   -->
<!-- ================================================================= -->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  <version>1.0</version>
  <build>
    <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
    <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
    <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
    <resources>
      <resource>
        <mergeId>resource-0</mergeId>
        <directory>C:\MVN\project\src\main\resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <mergeId>resource-1</mergeId>
        <directory>C:\MVN\project\src\test\resources</directory>
      </testResource>
    </testResources>
    <directory>C:\MVN\project\target</directory>
    <finalName>project-1.0</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <version>2.3.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-ejb-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0-beta-8</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>2.0-beta-7</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.0.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.1-alpha-2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  </reporting>
</project>
View Code

Maven 构建生命周期

一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的,每个阶段定义了目标被执行的顺序。当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。

阶段处理描述
prepare-resources 资源拷贝 本阶段可以自定义需要拷贝的资源
compile 编译 本阶段完成源代码编译
package 打包 本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包
install 安装 本阶段在本地 / 远程仓库中安装工程包

 

 

 

 

当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:

  • clean
  • default(or build)
  • site

 

参考文章:易百教程

 

 

 

 

posted @ 2018-02-05 14:48  安小  阅读(166)  评论(0编辑  收藏  举报