当前位置: 移动技术网 > IT编程>开发语言>Java > 关于maven依赖关系的问题

关于maven依赖关系的问题

2019年12月22日  | 移动技术网IT编程  | 我要评论

私企老板变身副部级干部,aff男友,毒枭之城

maven可以非常方便的管理jar包依赖问题。

这几天遇到的问题是:使用maven在idea跑flink程序提示

java.lang.classnotfoundexception
java.lang.noclassdeffounderror

 

开始时通过idea project structure(快捷键ctrl+alt+shift+s)-libraries添加jar包,有很多jar包,通过手动一个个添加不是这么回事呀。

重新学习廖雪峰老师讲的maven。

maven本来就可以自己管理包依赖的。那么是maven配置的不对?

删除.m2目录repository里面所有的文件,在idea右键project-maven-reimport,重新从阿里云下载jar包(需在.m2目录配置settings.xml)。

此处修改pom.xml <flink.version>1.9.1</flink.version> 的flink版本为1.9.1.

jar包已经重新下载好。仍然出现noclassdeffounderror问题。

查看.m目录已经下载的jar包,flink-streaming-java_2.11-1.9.1.jar有那个类的,为什么没有import呢?

原来:pom.xml中依赖关系是provided,不是compile。

<dependency>
<groupid>org.apache.flink</groupid>
<artifactid>flink-java</artifactid>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupid>org.apache.flink</groupid>
<artifactid>flink-streaming-java_${scala.binary.version}</artifactid>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>

 

maven定义了几种依赖关系,分别是compiletestruntimeprovided

scope说明示例
compile 编译时需要用到该jar包(默认) commons-logging
test 编译test时需要用到该jar包 junit
runtime 编译时不需要,但运行时需要用到 mysql
provided 编译时需要用到,但运行时由jdk或某个服务器提供 servlet-api

其中,默认的compile是最常用的,maven会把这种类型的依赖直接放入classpath。

将依赖关系修改为compile,在project右键-maven-reimport,运行程序。至此,问题解决。

再问:其实这个程序我之前成功运行过多次的,为什么刚开始可以运行成功呢?

 

启示:解决问题不能蛮干,而要探寻问题和工具的本质,从源头上下手。

 

reference:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网