(五)、第一个Maven项目 (IDea)
1.配置 Maven
2.创建Maven项目
3.设置插件
打包web项目打包成war; java工程打包成jar。
<!-- 构建 --> <build> <!--设置插件--> <plugins> <!-- 具体的配置插件 --> <plugin> <!-- 这里需要我们的三件套 --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <!-- 配置一些默认的项 --> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build>
(六)、依赖管理
1.依赖配置
依赖指当前项目运行所需要的 jar
, 一个项目可以设置多个依赖。
<!-- 设置当前项目所需要的所有 jar--> <dependencies> <!-- 设置具体的依赖 --> <dependency> <!-- 依赖所属群组 id--> <groupId>junit</groupId> <!-- 依赖所属项目 id--> <artifactId>junit</artifactId> <!-- 依赖版本号 --> <version>4.12</version> </dependency> </dependencies>
2.依赖传递
就是说假如B项目使用了A项目本身的依赖,那么B项目将会拥有A项目所有的依赖,然而A项目是不变的。
依赖具有传递性:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系;
- 间接依赖:被依赖资源如果依赖其他资源,当前项目间接依赖其他资源;
依赖传递的冲突问题:
- 路径优先:当依赖中出现相同的资源时,
层级越浅,优先级越高,层级越深,优先级越低
; - 声明优先:当资源在相同层级被依赖时,配置
顺序靠前的覆盖配置顺序靠后的
; - 特殊优先:当同级配置了相同资源的不同版本,
后配置的覆盖先配置的
;
3.可选依赖 (被动断)
可选依赖指对外隐藏当前所依赖的资源 - 不透明
当我们配置完这一项之后,假如别人引入我们的项目依赖,那么不会存在延申的依赖的。比如说我们在项目A中引入项目B,项目B的pom.xml的文件中在junit这个依赖,然后加入optional之后,我们就在项目A中看不到B中的Junit这个依赖。
<optional>true</optional>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <optional>true</optional> </dependency>
4.排除依赖 (主动断)
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本 - 不需要
项目3中不添加 optional,我们这里在项目2中直接进行排除的操作。
<!-- 具体依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!-- 排除集合 --> <exclusions> <!-- 排除某一个具体的 --> <exclusion> <!-- 三件套 : 版本号就不用写了,因为一排除,就是排除所有版本--> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency>
我们也发现没存在 junit衍生的版本。
5.依赖范围
- 依赖的 jar 默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围
- 作用范围
- 主程序范围内有效 (
main 文件夹范围内
) - 测试程序范围内有效(
test 文件夹范围内
) - 是否参与打包(
package 指令范围内
)
6.依赖范围传递性
带有依赖范围的资源在进行传递时,作用范围会受到影响: