Maven 工程分类和工程关系

Posted xingshouzhan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 - 编译中有效
 runtime - 运行中有效
 system - 全部中有效[默认]
 provided - 当前工程中有效.
 test - 只在测试有效 。
 -->
 <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>

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>

 

二  工厂关系

  1.依赖  即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种 情况下,需要在 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 工程依赖的所有资源,且可以应用 B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。具体工程 pom.xml 文件配置如下:

  2.1父工程

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

  2.2子工程

<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>parentGroup</groupId>
 <artifactId>parentProject</artifactId>
 <version>1.0</version>
 </parent>
 <!-- 若子工程所在组及版本与父工程一致,可以省略 groupId 和 version 标签配置 -->
 <groupId>childGroup</groupId>
 <artifactId>childProject</artifactId>
 <version>1.0</version>
</project>

  3聚合工程

  当我们开发的工程拥有 2 个以上模块的时候,每个模块都是一个独立的功能集合。比如 某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候每个平台都可以独立编译, 测试,运行。这个时候我们就需要一个聚合工程。 在创建聚合工程的过程中,总的工程必须是一个 POM 工程(Maven Project),各子模块 可以是任意类型模块(Maven Module)。所有聚合工程和聚合模块必须处于同一个组 (groupId)中,且聚合工程可以嵌套。 具体 pom.xml 文件配置如下:

  3.1总工程配置

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

  3.2子模块1配置

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

  子模块2配置

<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核心简析

maven如何继承父工程的依赖关系

Maven聚合开发实例详解---5555字

大数据必学Java基础(一百二十二):POM模式-Maven工程关系

大数据必学Java基础(一百二十二):POM模式-Maven工程关系

maven工程的Java操作目录服务器,如同操作关系型数据库服务器