第3章 Maven常用命令

3.5 搭建Web构架

3.5.1 创建一个Servlet

src/java/main创建了一个Servlet,但报错

要解决问题,就是要将servlet-api-xxx.jar包放进来,作为maven工程应当添加servlet的坐标,从而导入它的jar

3.5.2 在pom.xml文件添加坐标

直接打开hello_maven工程的pom.xml文件,再添加坐标

添加jar包的坐标时,还可以指定这个jar包将来的作用范围。

每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,比如:入门程序的坐标定义如下:

1
2
3
4
5
6
7
8
9
10
11
<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.itheima</groupId>
<!-- 模块名称 -->
<artifactId>hello_maven</artifactId>
<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging >打包类型</packaging>
<!-- 打包类型:
jar:执行package会打成jar包
war:执行package会打成war包
pom :用于maven工程的继承,通常父工程设置为pom -->

3.5.3 坐标的来源方式

添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询:

3.5.4 依赖范围

A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

  • provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用, provided依赖在编译和测试时需要,在运行时不需要,比如:servlet api被tomcat容器提供。

  • runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包。

  • test:test范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。

  • system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

在maven-web工程中测试各各scop。

测试总结:

  • 默认引入 的jar包 ——- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
  • servlet-api 、jsp-api ——- provided (编译、测试 有效, 运行时无效 防止和tomcat下jar冲突)
  • jdbc驱动jar包 —- runtime (测试、运行 有效 )
  • junit —– test (测试有效)

依赖范围由强到弱的顺序是:compile>provided>runtime>test

3.5.5 项目中添加的坐标

3.5.6 设置jdk编译版本

1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

3.5.7 编写servlet

src/main/java中创建ServletTest

内容如下:

3.5.8 编写jsp

3.5.9 在web.xml中配置servlet访问路径

3.5.10 添加tomcat7插件

在pom文件中添加如下内容

此时点击idea最右侧Maven Projects,

就可以看到我们新添加的tomcat7插件

双击tomcat7插件下tomcat7:run命令直接运行项目

也可以直接点击如图按钮,手动输入tomc7:run命令运行项目

点击后弹出如下图窗口

3.5.11 运行结果