明明包引入了,却报类找不到,查找后发现pom文件中依赖包引入的方式
maven pom.xml中dependency配置了<scope>provided<scope/>,运行时该依赖无效,导致异常
但是在IDEA中,maven配置<scope>provided</scope>,依赖只作用于编译和打包等,但不能用于运行类。通俗的说,配置了<scope>provided</scope>,就是在告诉IDEA,你不要担心,我会在运行时提供这个依赖,但是实际上却并没有提供依赖。除非将这个依赖加到类路径下。
对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。
就是你在把这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录。
解决办法
1.保留<scope>provided</scope>配置项,然后手动将依赖加到类路径。
File–>Project Structure–>左侧 Libraries,中间新建一个 lib 的project Library,选择 Java,然后在选择项目中的 jar 所在的文件夹
2.去掉<scope>provided</scope>,改为<scope>compile</scope>,当然只去掉也可,默认就是compile。注:改完后,在maven上运行一下reimport,重新导入一下。打完收工。