问题现象:项目结构以下java
growup-serviceapi
| - - - - - -growup-apieclipse
| - - - - - -growup-coremaven
| - - - - - -growup-warui
经过maven打包后出现growup-core依赖本地工程growup-api,growup-war也依赖了本地工程growup-api,但growup-war依赖的是本地仓库里的growup-core,而不是本地工程的growup-core。这时war包引用的是本地仓库里打好core的jar包,所以调试war包引用到core的class文件了。spa
问题解决与定位:这里其实应该是两个问题,第一个问题是为何依赖会出问题,依赖不了本地core子项目,第二个问题是怎么解决调试war包时调到core包的java文件而不是编译后的class文件。第二个问题是表象,咱们能够经过添加源码解决,这个办法也适用于debug开源代码。平常的项目中,咱们会导入一些依赖的开源jar包或者其余项目jar包,但并不会把整个项目导入到eclipse中来,由于咱们只要引用而无需修改。可是调试的话会跳到被引用jar包里的class文件,要么是调试显示不了代码,要么显示的是class文件,格式怪异。为了解决这两个显示问题,只须要把源码导入到依赖路径中便可。如上面的问题,我只须要右击war包的项目 -> 点击Build Path -> Configure Build Path -> Java Build Path -> 点开Maven Dependencies -> 找到被引用的牛奶瓶,即core项目的jar包 -> 点开左边的箭头 -> 点击Source attchment -> 点Edit -> 选择该jar包所对应的源码包(这里是我本地工程core项目) -> 点OK。debug
针对本问题,以上操做能够解决debug跳转到class文件显示奇怪的问题,但实际上治标不治本。为何这么说呢?回到maven打包现象来,在打war包时core包是从仓库里下载的,说明它找不到本地项目,因此我特地去看了war包的pom文件:调试
<dependency> <groupId>cn.wlf.wulinfeng</groupId> <artifactId>growup-core</artifactId> <version>0.4.0-SNAPSHOT</version> </dependency>
而后我又看了core包的pom文件:code
<artifactId>growup-core</artifactId> <version>0.4.0</version> <packaging>jar</packaging>
从版本号能够很明显的看出,这是两个core包。war包里依赖了的growup-core-0.4.0-SNAPSHOT,而本地的core打出来的叫growup-core-0.4.0,固然没法依赖了,因此它只能去仓库里下载growup-core-0.4.0-SNAPSHOT来依赖。上面解决第二个问题的作法其实是把war包里依赖的growup-core-0.4.0-SNAPSHOT包的源码包设置未本地项目的growup-core-0.4.0而已。blog
到这里解决第一个问题的办法一目了然:修改version一致,从新打包。