Maven学习笔记(四)-----生命周期|POM常用元素介绍

来源:互联网 发布:一个简单的php程序 编辑:程序博客网 时间:2024/06/16 09:37

clean清理项目

  • pre-clean:执行清理前的工作
  • clean:清理上一次构建生成的所有文件
  • post-clean:执行清理后的文件

default构建项目(最核心)

  • compile
  • test
  • package
  • install
    #site生成项目站点
    • pre-site:在生成项目站点前要完成的工作
    • site:生成项目的站点文档
    • post-site:在生成项目站点后要完成的工作
    • site-deploy:发布生成的站点到服务器上

POM文件

放在工程目录下。

<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   http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>反写的公司网址+项目名</groupId>   <artifactId>项目名+模块名</artifactId>   <!-- 第一个0 表示大版本号        第二个0 表示分支版本号        第三个0 表示小版本号        0.0.1        snapshot快照        alpha内部测试        beta公测        Release稳定        GA正式发布    -->   <version>项目的版本</version>   <!--打包方式,不指定默认是jar        war zip pom    -->   <packaging></packaging>   <!--项目描述名-->   <name></name>   <!-- 项目地址-->   <url></url>   <!--项目描述-->   <description></description>   <!--开发人员-->   <developers></developers>   <!--许可信息-->   <licenses></licenses>   <!--组织-->   <organization></organization>    <dependencies>        <dependency>            <groupId></groupId>            <artifactId></artifactId>            <version></version>            <type></type>            <!--依赖范围-->            <scope></scope>            <!--true|false,设置依赖是否可选,默认false.子项目默认      继承,true必须显式地引入该依赖-->            <optional></optional>            <!--排除依赖传递列表-->            <exclusions>                <exclusion>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <!--依赖管理-->    <dependencyManagement>        <dependencies>            <dependency>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <!--插件列表-->        <plugins>            <plugin>                <groupId></groupId>                <artifactId></artifactId>                <version></version>            </plugin>        </plugins>    </build>    <!--继承-->    <parent></parent>    <!--指定多个模块,一起编译-->    <modules>        <module></module>    </modules></project>

scope

  • compile:默认的范围,编译测试运行都有效
  • provided:在编译和测试时有效
  • runtime:在测试和运行时有效
  • test:只在测试时有效
  • system:编译和测试时有效(与本机系统相关联,可移植性差)
  • import:导入的范围,它只是用在dependencyManagment中,表示从其他的pom中导入dependecy的配置

import例子代码:

<project>  <modelVersion>4.0.0</modelVersion>  <groupId>maven</groupId>  <artifactId>B</artifactId>  <packaging>pom</packaging>  <name>B</name>  <version>1.0</version>  <dependencyManagement>    <dependencies>      <dependency>        <groupId>maven</groupId>        <artifactId>A</artifactId>        <version>1.0</version>        <type>pom</type>        <scope>import</scope>      </dependency>      <dependency>        <groupId>test</groupId>        <artifactId>d</artifactId>        <version>1.0</version>      </dependency>    </dependencies>  </dependencyManagement>  <dependencies>    <dependency>      <groupId>test</groupId>      <artifactId>a</artifactId>      <version>1.0</version>      <scope>runtime</scope>    </dependency>    <dependency>      <groupId>test</groupId>      <artifactId>c</artifactId>      <scope>runtime</scope>    </dependency>  </dependencies></project>

说明:所有A的管理依赖项将被并入B,除了d,因为它在这个pom中定义。

依赖传递

共三个工程A、B、C。
1)A打包入库,B依赖A;
2)B打包入库,C依赖B;
3)查看C工程的Maven Dependencies,发现C依赖了工程A。若不需要依赖A,则在C工程目录的POM文件中的依赖B项下面添加如下代码:

        <dependency>            <groupId>B的工程id</groupId>            <artifactId>B的模块id</artifactId>            <version>B的版本</version>            <exclusions>                <exclusion>                    <groupId>A的工程id</groupId>                    <artifactId>A的模块id</artifactId>                    <!--注意此处不需要添加A的version-->                </exclusion>            </exclusions>        </dependency>

依赖冲突

两条原则:
1. 短路优先
(1)A->B->C->X(jar)
(2)A->D->X(jar)
A工程优先依赖(2)。
2. 先声明优先使用
如果路径长度相同,则谁先声明,先解析谁。

聚合和继承

聚合

使用标签。

<modules>        <module>../bge</module>        <module>../nage</module>        <module>../shanji</module></modules>

继承

父POM代码如下:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>shen.one</groupId>    <artifactId>parent</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>pom</packaging>    <name>parent</name>    <url>http://maven.apache.org</url>    <properties>        <junit.version>3.8.1</junit.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>    <!--父POM将依赖关系加入到Manangement中去,父POM不做代码编写-->    <dependencyManagement>        <dependencies>            <dependency>                <groupId>junit</groupId>                <artifactId>junit</artifactId>                <version>${junit.version}</version>                <scope>test</scope>            </dependency>        </dependencies>    </dependencyManagement></project>

子POM代码如下:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>shen.one</groupId>    <artifactId>bge</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>bge</name>    <url>http://maven.apache.org</url>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties><!--继承的代码如下-->    <parent>        <groupId>shen.one</groupId>        <artifactId>parent</artifactId>        <version>0.0.1-SNAPSHOT</version>        <!--特别注意: 需要填写父POM路径-->        <relativePath>../parent/pom.xml</relativePath>    </parent><!--继承的代码如上-->    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>        </dependency>        <dependency>            <groupId>commons-io</groupId>            <artifactId>commons-io</artifactId>            <version>2.5</version>        </dependency>    </dependencies></project>
原创粉丝点击