闲聊
最近在将原有单一应用架构的项目升级为分布式项目结构,按照不同的功能,划分成不同的独立运行服务,每个服务都以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