博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven入门-7-Maven如何创建web动态工程和依赖范围介绍
阅读量:4301 次
发布时间:2019-05-27

本文共 3599 字,大约阅读时间需要 11 分钟。

这篇来看看如何在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”标签,添加如下内容。

jdk-1.8
true
1.8
1.8
1.8
1.8

保存,到这里并没有确保以后创建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中的依赖也是一个核心功能,我们学习只需要了解就好,这里来学习一下依赖下的范围这个小知识。

junit
junit
4.12
test

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

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

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

1)compile范围依赖

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

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

log4j
log4j
1.2.17

我们这里拿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

junit
junit
4.12
test

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

 

3) provided范围依赖

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

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

javax.servlet
servlet-api
2.5
provided

这个关键如何理解对打包和部署不参与。这里我们用的例子是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>这对标签的内容是完成可以看懂和看明白的。

 

转载地址:http://jqxws.baihongyu.com/

你可能感兴趣的文章
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>