关于maven的jar包下找不到类的一种可能

#关于maven的jar包下找不到类的一种可能

严重: Exception starting filter jfinal-web
java.lang.NoClassDefFoundError: com/alibaba/druid/pool/DruidDataSource
at com.jfinal.plugin.druid.DruidPlugin.start(DruidPlugin.java:127)
at com.jfinal.core.Config.startPlugins(Config.java:87)

刚开始找不到这个类,很纠结,去找maven库是不是有问题,看到有是有jar包的,类名也是这个jar包里的删除了jar包,重新拉了一遍,看了看jar包又出现了

一运行还是不行
于是想是不是版本的问题,但是这个比较难验证放弃
又看一下pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.26</version>
    <scope>provided</scope>
</dependency>

发现了<scope>provided</scope>抱着试试的态度删了它,居然可以了
查了下
其实这个问题很简单。对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。

而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。换句话说,它只影响到编译,测试阶段。在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包,所以无需我们这个artifact对应的jar包了。听起来很玄乎,对吧,其实一点也不难理解。举个scope=provided的例子。

比如说,假定我们自己的项目ProjectABC 中有一个类叫C1,而这个C1中会import这个portal-impl的artifact中的类B1,那么在编译阶段,我们肯定需要这个B1,否则C1通不过编译,因为我们的scope设置为provided了,所以编译阶段起作用,所以C1正确的通过了编译。测试阶段类似,故忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值