当前位置: 首页 > 后端技术 > Java

浅谈Maven项目的代码组织形式

时间:2023-04-01 23:29:37 Java

@[toc]因??为最近有朋友问起,所以想和大家聊聊Maven项目中代码的组织形式。其实问题不大,但不理解,就如雾里看花。那么简单说几句吧。1.代码组织形式先说代码组织形式。一般来说,比较常见的形式有两种:平铺父子结构。这两种形式松哥在不同的项目中都遇到过,就不说哪个更好了,简单说一下这两种方案。1.1平铺平铺代码类似如下:├──parent│├──pom.xml│└──src│├──main││├──java││└──resources│└──test│└──java├──vhr-dao│├──pom.xml│├──src││├──main│││├──java│││└──资源││└──测试││└──java└──vhr-service├──pom.xml├──src│├──main│├──java││└──resources│└──test│└──java如下图:可以看出,在这种结构下,父项目和各个子项目在代码组织上处于同一层次,都在同一个目录下。不过仔细看pom.xml文件,还是可以清楚的看出这三个模块的父子关系:parent:4.0.0org.javaboyparentpom1.0-SNAPSHOT../vhr-dao../vhr-service可以看到在指定module的时候,由于vhr-dao和vhr-service与parent的pom.xml不在同一个目录,所以使用了相对路径这里,相对路径的参考依据是父级的pom.xml文件的位置。vhr-dao:parentorg.javaboy1.0-SNAPSHOT../parent/pom.xml4.0.0vhr-dao可以看到在relativePath节点中,parent的pom.xml文件位置是通过相对路径指定的.此相对路径是针对子模块的pom.xml文件引用的。vhr服务:parentorg.javaboy1.0-SNAPSHOT../parent/pom.xml4.0.0vhr-service这个和vhr-dao类似,不再赘述。1.2父子结构父子结构类似如下:├──maven_parent│├──pom.xml│├──vhr-dao│├──pom.xml││└──src││├──主要││├──java│││└──资源││└──测试││└──java│└──vhr-service│├──pom.xml│└──src│├──main│...很多从GitHub上下载的开源项目,比如Shiro,都是这种结构。但是,文件夹的层次结构并不能说明任何问题。关键是看pom.xml中的定义。接下来我们看一下父模块的pom.xml和各个子模块的pom.xml的异同点。maven_parent:4.0.0org.javaboymaven_parentpom1.0-SNAPSHOTvhr-daovhr-service与上一个不同的是这里声明的模块不需要相对路径(实际上,它仍然是一个相对路径,只是../不需要),因为每个子模块和父模块的pom.xml文件都在同一个目录中。vhr-dao:maven_parentorg.javaboy1.0-SNAPSHOT4.0.0vhr-dao不需要通过relativePath节点指定parent的pom.xml文件的位置,因为parent的pom.xml和各个子模块都在同一个目录下。vhr服务:maven_parentorg.javaboy1.0-SNAPSHOT4.0.0vhr-service2.打包问题2.1继承有时候,只是想通过parent来管理不同项目的依赖关系,而不是一个聚合项目。这时候只需要去掉parent的pom.xml中的modules节点和它的内容,这样就不是聚合项目了,各个子模块也可以独立打包。2.2聚合当然很多时候我们是聚合工程。对于聚合项目,松哥一般建议大家从parent打包:这样可以保证打包的是最新的代码。当然还有一个操作过程:先把parent安装到本地仓库。然后将model、dao、service等模块安装到本地仓库。最后就可以独立打包web模块了。如果使用这个操作流程,需要注意每个模块的代码更新后,一定要及时安装到本地仓库,否则web模块独立打包时,其他使用的模块将无法安装最新代码。3.总结,Maven的几个小问题,窗口纸被戳破,豁然开朗~