maven之工程
maven工程类型
- pom工程
POM工程是逻辑工程,用在父级工程或者聚合工程,用来做jar包管理 - jar工程
将会打成jar包,用作jar包使用,即常见的本地工程---》java project - war工程
将会打包成war,发布在服务器上的工程。
maven目录结构
- src/main/java
这个目录存储java源代码 - src/main/resources
存储主要的资源文件,比如xml配置文件和properties文件。 - src/test/java
存储测试用的类,比如JUNIT的测试一般就放在这个目录下面。
因为测试类本身就是不属于项目的,所以放在任何一个包下都显的很尴尬。所以maven专门创建了一个测试包用于存放测试的类。 - src/test/resources
可以自己创建存储测试环境使用的资源文件。 - src
包含项目所有的原地啊嘛和资源文件,以及其他项目相关的文件。 - target
编译后内容放置的文件。 - pom.xml
是maven的配置文件。配置项目和项目之间关系,包括配置以来关系等。
pom文件项目对象模型的关系
依赖关系
即A工程开发或者运行需要B工程的支持,则代表A工程需要B工程支持。
在这种情况下,需要在A项目的pom.xml文件中增加下属配置定义依赖关系。

通俗理解就是:导入jar包。
B工程可以是自己的项目打包后的jar包,也可以是中央仓库的jar包。
如何导入依赖?
在pom.xml文件根元素dependencies 标签中,配置依赖信息内可以包含多个dependence元素,以声明多个依赖,每一个依赖dependence标签都应该包含一下元素:groupId、artifactId、version:也就是依赖坐标。对于任何一个依赖来说,基本坐标是最重要的,maven根据坐标才能找到需要的依赖。
依赖的好处:
1.省去了手动添加jar包的操作。
2.可以解决jar包冲突。
依赖传递性
项目2依赖了项目1,项目1依赖了mybatis,导入项目1的时候,也会将mybatis的依赖导入到项目2中。
依赖的两大原则
-
第一原则:最短路径优先原则
“最短路径优先”意味着项目依赖关系树中路径最短的版本会被使用。
![]()
-
第二原则
依赖路径一样长的话,第一原则不能解决所有问题,在pom中依赖声明的顺序决定了谁被先解析使用,顺序最靠前的那个依赖优胜。
排除依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
<!-- 排除标签-->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖范围
依赖范围决定了依赖坐标的失效时间
-
compile
这时默认范围。如果没有指定,就会使用该依赖范围,表示依赖在编译和运行时都生效。
![]()
-
provided
已提供依赖范围。使用此依赖范围的Maven依赖,典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍 -
runtime
表示编译时不生效。而只在运行时生效。典型的例子就是JDBC驱动实现。项目主代码的编译只需要提供JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。 -
SYSTEM
系统范围于provided类似,不过你必须显式制定一个本地系统路径的JAR,此类依赖应该一致有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地制定依赖文件的路径。 -
test
test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试代码的时候需要,应用的正常运行不需要此类依赖。典型的就是Junit,他只有在编译测试代码及运行测试的时候才需要,Junit的jar包就在测试阶段用就行。你导出项目的时候没有必要把junit的东西导出去了,所以在junit坐标下加入scope-test -
import
import范围只适用于pom中的部分,表明执行的POM必须使用 部分依赖。
注意:import只能用在dependencyManagement的scope中。
继承
如果A工程继承B工程,则代表A工程默认依赖B工程依赖的所有资源,且可以应用B工程中定义的所有资源信息。被继承的工程(B工程)只能时Pom工程。
注意:在父项目中放在
聚合
类似于父子工程项目。父工程是一个pom工程。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/17209927.html



浙公网安备 33010602011771号