Maven项目中jar包冲突问题解决 导入jar包scope作用域的使用

简介: Maven项目中jar包冲突问题解决 导入jar包scope作用域的使用

当我们使用Maven项目编写传统web时,需要使用Servlet,这时我们就需要在pom.xml文件中导入所需的jar包,

此时我们导入了servlet-apijsp-api并选择了版本

image.png

编写完代码后,在左侧maven工具栏的Lifecycle中执行maven生命周期的各个命令,下面Plugins可以看到每个命令所对应的插件

image.png

我们需要运行web项目,执行mvn tomcat:run来运行maven的tomcat,但我们发现右侧maven工具栏没有这个命令,

此时我们需要点击这个带m的按钮手动输入要执行的命令,运行

image.png

可以运行成功,访问地址后发现报错了,提示MyServlet不能被识别为一个Servlet,可明明就是一个Servlet。

image.png

 

 

maven有一键构建功能,当我们使用mvn tomcat:run 命令时,不再使用本地的tomcat,而是使用maven集成的tomcat插件对项目进行构建,

而这个tomcat插件中也有tomcat运行所需的jar包,我们可以看看本地tomcat运行所需的jar包中都有什么。

image.png

 

 

在tomcat的lib中我们发现也有jsp-api.jarservlet-api.jar两个jar包,当我们运行此项目的时候,项目中就出现了两套一摸一样的包,我们自己导入的包和

tomcat中,这两套包名称一模一样是相冲突的,所以运行项目时只能保留一套。

所以需要在maven的pom.xml文件中对导入的包设置作用域。

image.png

 

 

在version下增加scope标签,指明作用域范围,


compile :为默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效。


provided :在编译、测试时有效,但是在运行时无效。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。


runtime :在运行、测试时有效,但是在编译代码时无效。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。


test :只在测试时有效,例如:JUnit。


system :在编译、测试时有效,但是在运行时无效。和provided的区别是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量。


 

再次运行项目,访问成功

相关文章
|
2天前
|
Java Maven 容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
10 4
|
4天前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
17 1
|
5天前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
11 1
|
1天前
|
Java 关系型数据库 MySQL
Maven如何快捷导入jar包
Maven如何快捷导入jar包
|
3天前
|
Java Maven
java运行jar包提示 “XXX中没有主清单属性”,配置maven插件
java运行jar包提示 “XXX中没有主清单属性”,配置maven插件
7 0
|
17天前
|
Java Apache Maven
Maven 项目文档
本教程聚焦于创建Maven项目文档。在C:/MVN目录下,使用命令`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`生成java项目。
|
9天前
|
Java Apache Maven
Maven 项目文档
在`C:/MVN/consumerBanking`中创建Maven Java项目,使用命令`mvn archetype:generate`生成基础结构。确保`pom.xml`包含`maven-site-plugin`和`maven-project-info-reports-plugin`,版本至少为3.3和2.7,以避免`NoClassDefFoundError`。运行`mvn site`生成文档。
|
20天前
|
Java Apache Maven
Maven 项目文档
在C:/MVN下,使用`mvn archetype:generate`命令创建`consumerBanking`项目,设置相关参数。为解决`mvn site`运行时的NoClassDefFoundError,需在`pom.xml`中添加或更新maven-site-plugin和maven-project-info-reports-plugin至版本3.3和2.7以上。
|
16天前
|
Java 编译器 Maven
使用intellij idea搭建SSM架构的maven项目 详细
使用intellij idea搭建SSM架构的maven项目 详细
35 4
|
4天前
|
Java Apache Maven
Maven 项目文档
使用Maven创建`consumerBanking`项目,执行`mvn archetype:generate`命令初始化。确保`pom.xml`包含`maven-site-plugin`至少版本3.3和`maven-project-info-reports-plugin`至少版本2.7,以避免NoClassDefFoundError。升级插件解决文档构建问题。

热门文章

最新文章

推荐镜像

更多