Maven入门-7-Maven如何创建web动态工程和依赖范围介绍

这篇来看看如何在Eclipse上正确的基于Maven创建一个web动态项目。默认创建web动态项目是缺少内容,需要我们手动修改一下。然后来学习一下依赖中的范围。

 

1.Maven默认创建web工程效果

打开Eclipse,我们来创建一个maven工程,其实maven创建java工程和web工程在界面上就一个简单区别。

在packaging这里选择有三项,如果选择jar,创建的maven项目就是java工程,如果选择war,创建的项目就是web工程。这里我们选择war(一般web项目打包都打成war格式,例如Jenkins下载包为jenkins.war)

上面这个以war创建的maven工程,和你自己Eclipse版本有关系,我是2019-3月份的版本。之前我在更老的版本,创建war这种maven项目,连截图第一行,第二行这几个都不显示。

创建的项目就是这样,这个和我们常见的web动态工程项目是很不一样的。没有webContent文件夹,也没有WEB-INF文件夹,也没有web.xml文件(上面红色X报错就是没有web.xml造成的)

 

2.修改成正常的web工程

下面通过以下步骤,把这个maven工程改成我们熟悉的web动态工程。注意上面有一个src/main/webapp,这个文件夹下的内容就是我们平常创建web动态项目产生的webContent文件夹。

1) 右键工程,选择properties,先找到Project Facets。

2) 先右侧找到Dynamic Web Module,把前面√取消掉,点击Apply按钮

3) 然后再次把Dynamic Web Module前面的勾给勾上,勾上之后出现一个可点击的链接

4) 点击上面这个红色框内链接

点击Ok,进行保存,效果如下。

这样的话,基于Maven的web动态工程就创建好了。

 

3.一劳永逸修改j2ee版本

上面还是小问题,就是下图的J2EE 1.5,有些项目我们创建maven之后,这个地方显示J2SE-1.5,而我们实际JDK版本确实jdk1.8

1) 找到maven安装路径下的settings.xml文件

2) 打开settings.xml文件,搜索找到“profiles”标签,添加如下内容。

<profile>
    <id>jdk-1.8</id>
    <activation>
	<activeByDefault>true</activeByDefault>
	<jdk>1.8</jdk>
    </activation>
    <properties>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

保存,到这里并没有确保以后创建maven工程都是JDK1.8,还需要检查一下两个配置

检查Eclipse中使用的是内嵌的maven版本还是我们自己下载配置环境变量那个,如果是内嵌,点击add,添加我们配置的这个版本,一般内嵌的版本比较旧。

点击User Settings,检查conf/settings.xml是不是我们刚刚修改的这个文件。

这样就能确保下次创建的项目全部都是J2SE-1.8的版本。如果工程已经创建,右键这个工程,选择Maven-Update project..,这样之前的J2SE1.5就变成1.8版本。

 

4.依赖范围

下面学习Maven的一个小知识,就是依赖范围。我们前面学习过坐标,也就是GAV,也就是下面这段。坐标就是放在依赖标签下,Maven中的依赖也是一个核心功能,我们学习只需要了解就好,这里来学习一下依赖下的范围这个小知识。

<dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
    	<scope>test</scope>
</dependency>

这里多了一个scope,也就是范围的意思。这个scope就是表示这个依赖的范围。常见的值有test,compile和provided. 如果是compile,那么这行scope标签可以不写,不写代表默认就是compile。

下面我们来学习这三种依赖范围的作用效果。

我们一个Web开发项目。可以分成 开发 --》部署--》运行--》Tomcat,下面这几种范围就是在开发 --》部署--》运行--》Tomcat哪个阶段参与和不参与,有效和无效的总结。

1)compile范围依赖

  1. 对主程序是否有效:有效
  2. 对测试程序是否有效:有效
  3. 是否参与打包:参与
  4. 是否参与部署:参与

典型例子就是:spring-core,log4j等

<dependency>
    	<groupId>log4j</groupId>
    	<artifactId>log4j</artifactId>
    	<version>1.2.17</version>
</dependency>

我们这里拿log4j.jar这个依赖来解释,在src/main/java和src/test/java,我们都可以使用log4j来写入日志到文件和控制台,这个scope是默认,也就是值为compile,所以对主程序和测试程序都有效。参与打包和部署,其实打包就是为了接下来部署服务的。log4j在jdk中没有这个,在tomcat服务器上面也没有这个jar包。所以我们打包需要,而且部署也需要。所以这个log4j.jar最终会部署到tomcat下的WEB-INF\lib下。

我们可以来稍后用一个web工程来测试一下这个效果。

 

2)test范围依赖

  1. 对主程序是否有效:无效
  2. 对测试程序是否有效:有效
  3. 是否参与打包:不参与
  4. 是否参与部署:不参与

典型例子就是:junit 或者TestNG

<dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
    	<scope>test</scope>
</dependency>

由于Maven工程约束和规范,你是不可以在src/main/java下创建一个类,里面是有TestNG或者Junit,这个是做不到,不信你可以试试。所以这个junit依赖范围是test,那么对主程序是无效,对测试程序是有效。也不参与打包和部署,因为我们打包和部署都是和主程序有关,和测试代码没有关系,待会我们可以web项目部署到tomcat看看junit.jar包是否复制到tomcat对应目录下。

 

3) provided范围依赖

  1. 对主程序是否有效:有效
  2. 对测试程序是否有效:有效
  3. 是否参与打包:不参与
  4. 是否参与部署:不参与

典型例子就是:servlet-api.jar

<dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>servlet-api</artifactId>
    	<version>2.5</version>
    	<scope>provided</scope>
</dependency>

这个关键如何理解对打包和部署不参与。这里我们用的例子是servlet-api.jar, 也就是我们在web工程中,在webapp根目录新建一个login.jsp,如果pom.xml不写入上面依赖,就是会报错。(这里不考虑原先那种好动添加tomcat server办法)。

这种依赖范围为provided,为什么不参与打包和部署呢? 我们知道servlet-api.jar包在tomcat服务器上已经存在,所以不需要这个参与打包和部署。但是我们在写主程序和测试程序,没有tomacat环境也可以写代码,我们可以pom.xml添加这个依赖。只不过,我们无法在tomcat上运行环境而已。

上面三个jar包的依赖范围,这里用一个maven风格的web动态工程来演示效果,是否真的参与打包和部署。我们知道一旦参与了打包和部署,这个jar就会出现在tomcat服务器对应的项目的\lib文件夹中。

1) 把三面三种依赖添加到pom.xml

2)右键工程,选择maven-update project

3)  在src/main/java/webapp下新建一个login.jsp。什么都不行保存

4)右键login.jsp,run as -run on server.

根据提示,选择本地tomcat环境,点击结束,Eclipse工作区域会显示login.jsp内容。

5)到tomcat安装路径下知道这个web项目,看看lib下有没有上面出现的jar包。

所以,只有scope值是compile的依赖jar包才会参与打包和部署到web容器中。所以,根据上面知识,以后我们在看项目的pom.xml的内容,至少在<dependencies></dependencies>这对标签的内容是完成可以看懂和看明白的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值