zoukankan      html  css  js  c++  java
  • 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:MVNprojectsrcmainjava</sourceDirectory>
        <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
        <testSourceDirectory>C:MVNprojectsrc	estjava</testSourceDirectory>
        <outputDirectory>C:MVNproject	argetclasses</outputDirectory>
        <testOutputDirectory>C:MVNproject	arget	est-classes</testOutputDirectory>
        <resources>
          <resource>
            <mergeId>resource-0</mergeId>
            <directory>C:MVNprojectsrcmain
    esources</directory>
          </resource>
        </resources>
        <testResources>
          <testResource>
            <mergeId>resource-1</mergeId>
            <directory>C:MVNprojectsrc	est
    esources</directory>
          </testResource>
        </testResources>
        <directory>C:MVNproject	arget</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:MVNproject	arget/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

    参考文章:易百教程

     

     

     

     

  • 相关阅读:
    Paths on a Grid
    Three Kingdoms(优先队列+bfs)
    Factstone Benchmark(数学)
    C. Searching for Graph(cf)
    B. Trees in a Row(cf)
    String Successor(模拟)
    乘积最大的分解(数学)
    Kindergarten Election
    In 7-bit
    Friends
  • 原文地址:https://www.cnblogs.com/anxiao/p/8417552.html
Copyright © 2011-2022 走看看