maven的dependencies已经引入jar包 运行程序时却提示找不到jar包

https://blog.csdn.net/xuanmingren/article/details/80465063

我是在连接oracle数据库时 在pom.xml里添加依赖后确认dependencies已经引入jar包,而项目运行时却报ClassNotFound

多次尝试后,发现是因为在引入依赖时是复制以前的内容而忘记删除scope标签导致的

 例如: 在maven的pom.xml里面

                <dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
<scope>provided</scope>  //多了这一行配置造成的原因

</dependency>

那为什么会这样呢?

因为pom.xml的dependency标签下的scope标签是规定了jar包需要的范围

scope标签里面有5个值

1、compile 范围 :是默认编译范围 在项目编译,测试,运行均需要,由于运行时需要所以compile的依赖会被打包

2、provided: provided依赖只有当JDK或者一个容器已提供依赖时才使用,其是在编译,测试需要,运行时不需要,因为某些jar包服务器上面有,如果运行时再需要就会造成jar包冲突,比如:servlet api会被tomcat容器提供.上面运行时找不到jar包就是这个原因,因为provided在运行时并不被需要,而tomcat服务器和jdk上也没有这个jar包,所以运行时找这个jar包时就会找不到,解决方法就是不用provided,通过删除这个scope标签即可,因为删除后就是默认的compile范围了

3、runtime依赖: 在运行和测试需要,编译期不需要,只有在编译和运行时才使用,由于运行时需要所以runtime依赖会被打包

4、test依赖: 在测试编译和测试运行时需要,在编译和运行时都不需要,因此不会被打包

5、system: 不推荐使用

猜你喜欢

转载自blog.csdn.net/liyanlei5858/article/details/81116181
今日推荐