【Maven】命令行操作(续)(上)

简介: 【Maven】命令行操作(续)(上)

👉引言💎


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人............

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉


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

0a2653c851af460fa595bd959398a8f1.png

通过查看war包内的结构,我们看到被Web工程依赖的Java工程确实是会变成Web工程的WEB-INF/lib目录下的jar包。

image.png


③查看当前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范围依赖进来。


0a2653c851af460fa595bd959398a8f1.png


实验七:测试依赖的传递性


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


相关文章
|
2月前
|
Java Maven
Maven【4】(继承)(命令行操作)
Maven【4】(继承)(命令行操作)
17 1
|
2月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
22 0
|
2月前
|
Java Maven
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
21 0
|
2月前
|
Java Maven
Maven【1】(命令行操作)
Maven【1】(命令行操作)
27 0
|
3月前
|
存储 JavaScript Java
【Maven从入门到如土】快速使用 Maven:命令行环境
【Maven从入门到如土】快速使用 Maven:命令行环境
38 0
|
9月前
|
存储 JavaScript Java
Maven基础学习---3、Maven的使用(命令行)
Maven基础学习---3、Maven的使用(命令行)
|
10月前
|
Java Apache Maven
利用Maven工程命令行学习实操<第三课>(二)
利用Maven工程命令行学习实操<第三课>(二)
104 0
|
10月前
|
Java Maven
利用Maven工程命令行学习实操<第三课>(一)
利用Maven工程命令行学习实操<第三课>(一)
94 0
|
11月前
|
Java Maven
初学maven时在命令行窗口构建maven项目时出现 Generating project in Interactive mode
初学maven时在命令行窗口构建maven项目时出现 Generating project in Interactive mode
|
12月前
|
Java Maven
初学maven时在命令行窗口构建maven项目时出现 Generating project in Interactive mode
初学maven时在命令行窗口构建maven项目时出现 Generating project in Interactive mode