maven工程介绍

一、 maven工程种类

1 、POM 工程

用在父级工程或聚合工程中,用来做jar 包的版本控制。

常见pom.xml 配置如下:

<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>groupName</groupId>
    <!-- 工程名称 -->
    <artifactId>artifactName</artifactId>

    <!-- 版本 -->
    <version>1.0</version>

    <!-- 工程类型 -->
    <packaging>pom</packaging>

    <!-- 定义一个properties 配置信息。 定义配置信息,为了统一管理。 -->    
    <properties>
        <!-- 如果需要使用properties 配置信息内容。 可以通过表达式${junit.version}访问 4.12 -->
        <junit.version>4.12</junit.version>
    </properties>


    <!-- 定义当前工程都管理了什么jar,都是什么版本。并非依赖。 -->
    <dependencyManagement>
        <dependencies>

            <!-- 单元测试 -->
            <dependency>
                <groupId>junit </groupId>
                <artifactId>junit </artifactId>
                <version>${junit.version}</version>

                <!-- 有效范围,作用域 :
                    compile  -  编译中有效 [ 默认 ]
                    provided -  当前工程中有效. 
                    test     -  只在测试有效 。
                    runtime  -  运行中有效                   
                    system   -  全部中有效 ,不推荐使用                    
                -->
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!-- 定义当前工程依赖了什么jar 包,版本是什么。 -->
    <dependencies>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit </groupId>
            <artifactId>junit </artifactId>
            <version>${junit.version}</version>
            <!-- 有效范围,作用域。 -->
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

scope 依赖范围

依赖范围
(scope)
对于主代码
classpath有效
对于测试代码
classpath有效
被打包,对于运行时
classpath有效
例子
compile [ 默认 ] Y Y Y log4j
provided Y Y - servlet-api
test - Y - junit
runtime - - Y JDBC 驱动实现,如 :
mysql-connector-java-5.1.7-bin.jar

2、JAR 工程

将会打包成jar 用作jar 包使用。即常见的本地工程- Java Project 。

常见pom.xml 配置 如下:

<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>groupName</groupId>
    <artifactId>artifactName</artifactId>
    <version>1.0</version>

    <!--jar 工程为默认工程类型,可以省略配置 -->
    <!-- <packaging>jar</packaging> -->

</project>

3、WAR 工程

将会打包成war,发布在服务器上的工程。如网站或服务。即常见的网络工程- Dynamic Web Project。

war工程默认没有WEB-INF 目录及web.xml 配置文件,IDE 通常会显示工程错误,提供完整工程结构可以解决。常见pom.xml 配置如下:

<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>groupName</groupId>
    <artifactId>artifactName</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

</project>

二、maven 工程关系

1 、依赖

A工程与B工程是平级关系。

即A工程开发或运行过程中需要B工程提供支持,则代表A 工程依赖B 工程。
在这种情况下,A工程需要在pom.xml 文件中增加下属配置定义依赖关系:

<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>localPrjectGroupName</groupId>

    <!-- 本工程名称 -->
    <artifactId>localPrjectArtifactName</artifactId>

    <!-- 本工程版本 -->
    <version>localPrjectVersionNo</version>

    <!-- 本工程类型 -->
    <packaging>packagingTypeName</packaging>

    <!-- 依赖信息定义 -->
    <dependencies>

        <!-- 定义一个具体的依赖 -->
        <dependency>
            <!-- 依赖的工程所在组名 -->
            <groupId>groupName</groupId>

            <!-- 依赖的工程名 -->
            <artifactId>artifactName</artifactId>

            <!-- 依赖的工程版本 -->
            <version>versionNo</version>

            <!-- 依赖的工程有效范围,其可选值有:
             compile - 编译中有效 
             runtime - 运行中有效 
             system  - 全部中有效[默认] 
             provided - 当前工程中有效. 
             test - 只在测试有效 
             -->
            <scope>system</scope>
        </dependency>


    </dependencies>
</project>

2 、继承

A工程与B工程是子与父关系。
子工程只能有一个父工程。

如果A 工程继承B 工程,则代表A 工程默认依赖B 工程依赖的所有资源,且可以应用B 工程中定义的所有资源信息。

被继承的工程(B工程)只能是POM 工程。具体工程pom.xml 文件配置如下:

父工程配置:(B工程)

<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>parentGroup</groupId>
    <artifactId>parentProject</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

</project>

子工程配置:(A 工程)

parent标签表示继承关系
子工程,有且只能有一个 parent

<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>

    <!-- 继承父工程,且只能有一个 parent引用 -->
    <parent>
        <groupId>parentGroup</groupId>
        <artifactId>parentProject</artifactId>
        <version>1.0</version>
    </parent>


    <!-- 若子工程所在组、版本号与父工程的一致,
        可以省略groupId 和version 标签配置
     -->
    <groupId>childGroup</groupId>
    <artifactId>childProject</artifactId>
    <version>1.0</version>

</project>

3 、聚合

总工程(POM工程)与各子模块的关系。

当我们开发的工程拥有2 个以上模块的时候,每个模块都是一个独立的功能集合。比如某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候每个平台都可以独立编译, 测试,运行。这个时候我们就需要一个聚合工程。

在创建聚合工程的过程中,总的工程必须是一个POM 工程(Maven Project ),各子模块可以是任意类型模块(Maven Module )。所有聚合工程和聚合模块必须处于同一个组 groupId)中,且聚合工程可以嵌套。
具体pom.xml 文件配置如下:

* 总工程配置 (superGroup):*

modules标签 就是 聚合关系的定义

<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>superGroup</groupId>
    <artifactId>superProject</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <!-- 当前聚合工程中的子模块定义,引用的是子模块的 artifactId 。 -->
    <modules>
        <module>subProject1</module>
        <module>subProject2</module>
    </modules>

</project>

子模块配置 (subProject1):

<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>

    <parent>
        <groupId>superGroup</groupId>
        <artifactId>superProject</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>subProject1</artifactId>

</project>

subProject2 :

<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>

    <parent>
        <groupId>superGroup</groupId>
        <artifactId>superProject</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>subProject2</artifactId>

</project>

三、 Maven 中的常见插件

Maven 官方有两个插件列表,

第一个列表的GroupId 为org.apache.maven.plugins,这里的插件最为成熟
具体地址为:http://maven.apache.org/plugins/index.html

第二个列表的GroupId 为 org.codehaus.mojo ,这里的插件没有那么核心,但也有不少十分有用,
其地址为:http://mojo.codehaus.org/plugins.html

java 编译器插件

pom.xml 配置:

<build>
    <plugins>
        <!--java 编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/81188707