maven插件顺序与ClassNotFound

闲聊

最近在将原有单一应用架构的项目升级为分布式项目结构,按照不同的功能,划分成不同的独立运行服务,每个服务都以jar运行。

问题

发现用java -jar来运行 服务的时候,提示ClassNotFound,找了一下META-INF/MANIFEST.MF文件,发现classpath 没有项目所依赖的jar包。

maven里有两个插件影响MF文件的生成: maven-jar-plugin 跟 maven-dependency-plugin
maven-jar-plugin:用于生成jar包,包括MF文件的描述信息等配置,其中包括了classpath的配置,这里会扫描指定依赖的包来进行配置
maven-dependency-plugin:用于将依赖的jar包复制到指定的目录下

原因

由于插件顺序为 : 1.maven-jar-plugin => 2.maven-dependency-plugin
导致了在生成MF文件之前还没有将依赖的jar包汇合好,就已经开始写入MF文件的classpath属性。

解决

1.将两个插件顺序互换 maven-dependency-plugin => maven-jar-plugin
2.将插件顺序生效, 调用mvn clean 清空依赖包的集合目录
如果不执行mvn clean ,maven-jar-plugin 插件会将旧的jar包扫描到MF文件classpath中

参考信息:
mvn clean 与mvn clean install区别
http://blog.csdn.net/abc86319253/article/details/44019881

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容