👉引言💎
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人............
铭记于心 | ||
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
Maven的命令行操作(续)
实验五:war中导入jar包
1、观念
明确一个意识:从来只有Web工程依赖Java工程,没有反过来Java工程依赖Web工程。本质上来说,Web工程依赖的Java工程其实就是Web工程里导入的jar包。最终Java工程会变成jar包,放在Web工程的WEB-INF/lib目录下。
2、操作
在pro02-maven-web工程的pom.xml中,找到dependencies标签,在dependencies标签中做如下配置:
<!-- 配置对Java工程pro01-maven-java的依赖 --> <!-- 具体的配置方式:在dependency标签内使用坐标实现依赖 --> <dependency> <groupId>com.atguigu.maven</groupId> <artifactId>pro01-maven-java</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
3、在Web工程中,编写测试代码
①补充创建目录
pro02-maven-wb\src\test\java\com\maven
②确认Web工程依赖了junit
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
③创建测试类
把Java工程的CalculatorTest.java类复制到pro02-maven-wb\src\test\java\com\maven目录下
4、执行Maven命令
①测试命令
mvn test
说明:测试操作中会提前自动执行编译操作,测试成功就说明编译也是成功的。
②打包命令
mvn package
通过查看war包内的结构,我们看到被Web工程依赖的Java工程确实是会变成Web工程的WEB-INF/lib目录下的jar包。
③查看当前Web工程所依赖的jar包的列表
mvn dependency:list
[INFO] The following files have been resolved:
[INFO] org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] junit:junit:jar:4.12:test
说明:javax.servlet:javax.servlet-api:jar:3.1.0:provided格式显示的是一个jar包的坐标信息。格式是:
groupId:artifactId:打包方式:version:依赖的范围
这样的格式虽然和我们XML配置文件中坐标的格式不同,但是本质上还是坐标信息,大家需要能够认识这样的格式,将来从Maven命令的日志或错误信息中看到这样格式的信息,就能够识别出来这是坐标。进而根据坐标到Maven仓库找到对应的jar包,用这样的方式解决我们遇到的报错的情况。
④以树形结构查看当前Web工程的依赖信息
mvn dependency:tree
[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] ± junit:junit:jar:4.12:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
我们在pom.xml中并没有依赖hamcrest-core,但是它却被加入了我们依赖的列表。原因是:junit依赖了hamcrest-core,然后基于依赖的传递性,hamcrest-core被传递到我们的工程了。
实验六:测试依赖的范围
1、依赖范围
配置文件中的依赖范围需要适当选择:使部署到服务器时war包更加轻量;jar包之间产生冲突
①compile和test对比
main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) | |
compile | 有效 | 有效 | 有效 | 有效 |
test | 无效 | 有效 | 有效 | 无效 |
②compile和provided对比
main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) | |
compile | 有效 | 有效 | 有效 | 有效 |
provided | 有效 | 有效 | 有效 | 无效 |
③结论
**compile:通常使用的第三方框架的jar包这样在项目实际运行时真正要用到的jar包都是以compile范围进行依赖的。比如SSM框架所需jar包。****
**
**test:测试过程中使用的jar包,以test范围依赖进来。比如junit。****
**
provided:在开发过程中需要用到的“服务器上的jar包”通常以provided范围依赖进来。
实验七:测试依赖的传递性
1、依赖的传递性
①概念
A依赖B,B依赖C,那么在A没有配置对C的依赖的情况下,A里面能不能直接使用C?
②传递的原则
在A依赖B,B依赖C的前提下,C是否能够传递到A,取决于B依赖C时使用的依赖范围。
- B依赖C时使用compile范围:可以传递
- B依赖C时使用test或provided范围:不能传递,所以需要这样的jar包时,就必须在需要的地方明确配置依赖才可以。
2、使用compile范围依赖spring-core
测试方式:让pro01-maven-java工程依赖spring-core
具体操作:编辑pro01-maven-java工程根目录下pom.xml
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.0.RELEASE</version> </dependency>
使用mvn dependency:tree命令查看效果:
[INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT
[INFO] ± junit:junit:jar:4.12:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] - commons-logging:commons-logging:jar:1.1.1:compile
还可以在Web工程中,使用mvn dependency:tree命令查看效果(需要重新将pro01-maven-java安装到仓库):
[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] ± junit:junit:jar:4.12:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] - commons-logging:commons-logging:jar:1.1.1:compile
3、验证test和provided范围不能传递
从上面的例子已经能够看到,pro01-maven-java依赖了junit,但是在pro02-maven-web工程中查看依赖树的时候并没有看到junit。
要验证provided范围不能传递,可以在pro01-maven-java工程中加入servlet-api的依赖。
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
效果还是和之前一样:
[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] ± junit:junit:jar:4.12:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] - commons-logging:commons-logging:jar:1.1.1:compile