maven工程项目文件对应模块内容

这里写自定义目录标题

hellowmaven 工程

|——src 源码
|——|——main 存放主程序
|——|——|——java 存放Java源码(dao、service、controller)
|——|——|——resources 存放框架或其他工具的配置文件(spring、mapper、jdbc。properties)
|——|——|——sql 存放.sql文件
|——|——|——webapp 存放index.jsp文件
|——|——|——|——resources
|——|——|——|——WEB-INF 存放web.xml文件

|——|——test 存放测试程序
|——|——|——java 存放java测试的原文件
|——|——|——resources 存放测试的配置文件

|——pom.xml maven工程的核心配置文件

在这里插入图片描述
maven常用命令:

mvn compile 编译,将Java 源程序编译成 class 字节码⽂件
mvn test 测试,并⽣成测试报告
mvn clean 将以前编译得到的旧的 class 字节码⽂件删除
mvn pakage 打包,动态 web⼯程打 war包,Java⼯程打 jar 包。
mvn install 将项⽬⽣成 jar 包放在仓库中,以便别的模块调⽤
在这里插入图片描述

jar包依赖的范围 scope:
在这里插入图片描述

1.compile 范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
是否参与部署:参与
典型例⼦:log4j

2.test 范围依赖
对主程序是否有效:⽆效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例⼦:Junit

3.provided 范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例⼦:servlet-api.jar,⼀般在发布到 服务器中,⽐如 tomcat,服务器会⾃带 servlet-api.jar 包,所以provided 范围依赖只在编译测试有效。

runtime 范围依赖:在测试、运⾏的时候依赖,在编译的时候不依赖。例如:JDBC 驱动,项⽬代码只需要 jdk 提供的 jdbc 接⼝,只有在执⾏测试和运⾏项⽬的时候才需要实现 jdbc 的功能。

依赖的传递:
在这里插入图片描述

如我们创建三个 Maven ⼯程,maven-first,maven-second 以及 maven-third,⽽ third 依赖于second,second ⼜依赖于 first,那么我们说 second 是 third 的第⼀直接依赖,first 是 second 的第⼆直接依赖。⽽ first 是 third 的间接依赖。

总结
当第⼆依赖的范围是 compile 的时候,传递性依赖的范围与第⼀直接依赖的范围⼀致。
当第⼆直接依赖的范围是 test 的时候,依赖不会得以传递。
当第⼆依赖的范围是 provided 的时候,只传递第⼀直接依赖范围也为 provided 的依赖,且传递
性依赖的范围同样为 provided;
当第⼆直接依赖的范围是 runtime 的时候,传递性依赖的范围与第⼀直接依赖的范围⼀致,
但 compile 例外,此时传递的依赖范围为 runtime;
我们这⾥举个例⼦来看:
第⼆依赖范围是 test

依赖的排除
如果我们在当前⼯程中引⼊了⼀个依赖是 A,⽽ A ⼜依赖了 B,那么 Maven 会⾃动将 A 依赖的 B 引⼊当前⼯程,但是个别情况下 B 有可能是⼀个不稳定版,或对当前⼯程有不良影响。这时我们可以在引⼊ A 的时候将 B 排除。
exclusions:⽤来排除传递性依赖 标签
如何排除呢?我们在 Maven_second 的 pom.xml ⽂件中添加如下代码:
在这里插入图片描述
再次查看⼯程:Maven_second 的 commons-logging 已经移除了

依赖的冲突

在 maven 中存在两种冲突⽅式:⼀种是跨 pom ⽂件的冲突,⼀致是同⼀个 pom ⽂件中的冲突。

**跨 pom ⽂件,路径最短者优先。**

⽐如我们在 Maven_first 中的 Junit 是4.9版本的,Maven_second 中的 Junit 是4.8版本的,那么Maven_third 中的 Junit 将会是那个版本呢?
由于 Maven_second 是 Maven_third 的直接依赖,明显相⽐于 Maven_first 路径要短,所以 Maven_third 的 Junit 版本与 Maven_second 保持⼀致

  **同⼀个pom.xml ⽂件,先申明者优先。**越往下,越优先声明!!!

在这里插入图片描述
可选依赖
Optional 标签标示该依赖是否可选,默认是 false。可以理解为,如果为 true,则表示该依赖不会传递下去,如果为false,则会传递下去。
在这里插入图片描述
在 Maven_second 的 pom ⽂件中设定 Junit 不可传递,那么Maven_third ⼯程中将不会有来⾃Maven_second 的 Junit 的传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值