JAVASpring

Maven 子项目在父项目的依赖中显示为jar包

背景

之前有个问题困扰了我很久,就是Maven父项目引用了几个子项目打包成的jar包,然而在Maven Dependencies中却总是显示成一个项目,而不是jar包。

这导致了我在debug父项目时,当debug到子项目的代码时总是不跳入jar中编译好的class文件,而是直接跳转到工作空间中的子项目的java文件。由于我修改过子项目的代码,但是还未重新打包,于是debug的时候进入的是java文件,和父项目实际引用的class文件版本不一致。

这是Eclipse的一个功能,当父项目引用的子项目的工程代码,也在当前eclipse的workspace中时,在Pom依赖视图中,是可以显示成文件夹工程的。这样我们可以直接修改子项目的工程,debug调试时,也可以直接定位到子工程java的代码。

当然我们可以自由选择父项目引用的子项目jar包是否要关联到工作空间中对应的子项目,操作如下:

解决方法一


右键项目名,选择 Maven -> Disable Workspace Resolution(取消本地工作目录项目关联)再F5刷新一下项目,这时候你会发现父项目的Maven依赖中所引用的子项目变成了jar包。这个时候需要maven仓库中有这个子项目的jar包,也许需要在子项目工程run maven install安装一下这个的jar包。

如果想要变回原来文件夹工程那样,还是类似的操作: 右键项目名,选择 Maven ->Enable Workspace Resolution,再F5刷新一下项目就行了。

解决方法


问题如下所示,当工程A引用了私有仓库中的一个Jar包,且该Jar包由项目B发布,而项目B同时处在打开状态并且version正好是项目A所引用的版本,则在A的MavenDependencies下显示为文件夹。

个人觉得较好的解决方式是项目B每次发布完之后,pom.xml的version都升高一个版本,以备下一次发布。因为相同版本是不能重复发布的。这样的话,A和B也可以同时打开。

项目A:


   <dependency>
            <groupId>com.funtv</groupId>
            <artifactId>fun-redis</artifactId>
            <version>0.0.4</version>
  </dependency>

项目B:

    	<groupId>com.funtv</groupId>
    	<artifactId>fun-redis</artifactId>
    	<version>0.0.4</version>
    	<packaging>jar</packaging>

当项目B的版本号改为0.0.5之后,则项目A显示就正常了,如下图