使用IDEA IDE构建Maven项目,其他的依赖可以正常导入、使用,今天尝试集成阿里的P3C-PMD进行静态代码检查,遇到了如下问题:
提示找不到对应的类,但是在IDE中已经可以看到Maven成功下载了该jar包,
与该依赖相关的POM.xml如下:
<dependency>
<groupId>com.alibaba.p3c</groupId>
<artifactId>p3c-pmd</artifactId>
<version>2.0.0</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<rulesets>
<ruleset>/src/main/resources/rulesets/ali-comment.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-concurrent.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-constant.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-exception.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-flowcontrol.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-naming.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-oop.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-orm.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-other.xml</ruleset>
<ruleset>/src/main/resources/rulesets/ali-set.xml</ruleset>
</rulesets>
<printFailingErrors>true</printFailingErrors>
</configuration>
<version>3.8</version>
</plugin>
因为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依赖: 在测试编译和测试运行时需要,在编译和运行时都不需要,因此不会被打包
作者:xuanmingren
来源:CSDN
原文:https://blog.csdn.net/xuanmingren/article/details/80465063
版权声明:本文为博主原创文章,转载请附上博文链接!
看依赖配置没有问题,Maven Project 刷新下重新下载,可能是网速问题没有下载到本地仓库。