杂谈maven工程类型(2)
Maven工程类型
在maven构建中,分为若干类型,相当于ANT构建中的java project | dynamic web project
Maven构建中的工程类型是配置中的一个选项---->packaging选项
代表包结构类型,在对应的工程类中创建对应的目录结构
1、jar
相当于java project ,本地java工程,没有网络应用的java工程
理论上只有源代码和字节码
对于maven工程,对代码、资源、字节码的管理非常细致
目录结构分为:
src:
源信息
src/main/java:
代表java代码目录,就是原ANT构建中的src中的代码 信息,代表当前工程的核心内容
如:pojo,数据访问对象DAO,控制层的Controller
在本目录下,有特定的构建方式,Maven只会编译当前目录中的java源代码,不管理任何的配置文件
src/main/resource:
当前木丁定义src/main/java目录中源代码需要的配置文件的位置
在当前目录中定义配置文件,不做任何操作,直接复制到target对应的目录中
在本目录定义java源文件,不会做编译处理
src/test/java:
测试代码目录,如果有必要写测试案例,则将测试代码写在当前目录中
测试代码可以访问src/main/中的所有代码和配置信息
当前cesium目录中的代码不会发布
此时目录中的代码在maven安装编译得时候,自动触发运行
自动触发的都是junit测试案例,被@Test注解描述的方法
如果测试代码有任何错误,则安装编译失败
src/test/resource:
测试代码需要的配置文件,不会发布,只能被src/test/java目录中的代码访问
target:
目标信息,相当于是字节码目录,也就是Ant构建中的bin目录
target目录中的子目录和src中的代码结构完全一致
2、war
是jar工程的升级版,相当于dynamic web project,目录与jar一致,增加新的目录
src/main/webapp
相当于web 工程中的WebContent目录,用于定义网络内容
如:WEB-INF,web.xml,lib等
在maven工程中的war工程中,默认不存在WEB-INF目录和web.xml文件
在wen工程中,强制要求结构为:
webapp/
/WEB-INF
/web.xml
因此在创建war工程时候,大多数情况有异常
新建war工程
手动添加
3、POM文件
是maven中定义的逻辑工程(理解为java的抽象类)
POM工程是maven中用于定义公共性的工程,如:公共父工程、聚合工程
只是一个逻辑上的工程,但是不需要编写代码、配置等固定信息
管理其他工程的工程
没有特定的目录结构,只有src/site目录,代表逻辑管理目录
4、工程的核心配置
pom.xml是maven工程中的核心配置文件
用于配置maven工程中的依赖关系、资源、插件、信息定义等
依赖:当前工程需要什么jar包,相当于java中的对象应用,已经具体使用了
关系:当前工程和其他工程之间有什么关系,依赖、继承、聚合
资源:定义当前工程和其子工程都需要什么jar,相当于java中类型的定义,未使用,仅定义
信息定义:统一的定义需要使用的版本,文件名称等,类似ava中的properties配置文件
相关测试
工程关系:依赖、继承、聚合
依赖
多个工程之间依赖,依赖方有被依赖方的所有资源
如:A工程依赖B工程,则A工程可以使用B工程所有的资源,不包括测试资源src/test目录中的资源
就是pom文件中的dependency
创建两个maven工程
B中添加新的User类
<dependencies>
<dependency>
<groupId>com.b</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
继承
多个工程之间的继承关系,代表子工程有父工程的所有资源,不包括测试字眼,常用于管理依赖信息
如:D工程继承C工程,代码D可以访问C工程中的所有资源信息
父工程要求:
父工程必须是逻辑工程,不能是实际工程
父工程必须是pom工程,不能时jar和war功能
新建cd两个工程:
D中
<parent>
<groupId>com.c</groupId>
<artifactId>C</artifactId>
<version>1.0</version>
</parent>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> </dependencies>
聚合
多个小工程,聚合为一个大的完整工程
如ssm工程,聚合了pojo、mapper、service、controller这四个工程,代表4个子工程是一个完整的聚合工程ssm
聚合工程代表缺一不可,聚合工程的完整工程是真实存在的工程,而内部的子聚合工程是完整工程的一个目录体系
聚合父工程是一个macen project,聚合子工程是一个maven project
聚合父工程的package必须是pom,聚合子工程的packaging无要求