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