现在基于Java的企业开发如果不是太土或者太前卫基本上都会基于maven 来对项目进行版本管理。 其实用maven 来进行版本管理跟源代码管理和项目的开发流程相关发布,issue管理都有非常紧密的关系。
其实目前的项目层次划分还是比较清晰的。 基本上分为三层: 最底层的框架层,应用层 和最上面的use case层。
1, 框架层提供的是一个基本的框架。由于现在这个系统是要运行在特有的cloud 环境,最悲催的是不能用Spring,所以这个framework层做了很多Spring 干的事情,IOC, 生命周期的组件, 事务管理。 封装了最核心的基于jms消息机制的proactor 模式。另外框架层还定义了很多常用的模块来封装了基础的功能。
2, 应用层当然是基于框架层定义了系统特有的流程,规则匹配机制,工作引擎。 它也是分为N个不同的模块。
3, Use case 层则基于应用层根据业务的不同划分成不同的use case。
这样看下来, 最起码可以给framework, application 和use case 分别定义一个顶层的pom parent, 然后每一个子模块定义自己的pom。 那怎么来定义pom 里面的版本呢, 一种是顶层的pom 有自己的版本,子模块有自己的版本号。这种管理方法支持不同模块有不同的版本,可以单独release。另外一种是在每一个相同的层次上只有一个版本, 比如整个framework 层只有一个版本号。 划分成不同的模块只是功能方面的划分, 不需要单独release 管理。所以我们还是选择一层一个版本吧。
让我们回头看看Maven 解析dependency的rule是:
1, nearest definition。 如果一个库在依赖树上不同版本被依赖, 在最靠近当前pom 的层次上那个版本获胜。 如果两个都处于相同的层次, 那么谁先定义谁获胜。 这样dependency 出现的先后也很重要了。
2, 如果我们想自己来解决这种多重依赖的问题, 我们可以在自己的pom 来显示定义下这个库的依赖。 这个定义当然就满足它的nearest definition的要求了, 就按我们自己的pom中的版本来了。
3, 我们还可以用exclusive 来排除某个依赖库的依赖。
4, optional 的依赖 是不会传递的。
再看看怎么来定义我们的各个层中pom 的依赖呢:
1, 在各层的pom parent 中 指定dependencyManagement 元素 这层中公共的依赖都放在这里, 常用的依赖的版本在properties 来指定。 子模块中就指定dependency 就可以了。不用知道版本。
2, 针对那种依赖不想传递下去, 我们需要加optional 不再传递下去。 比如在我们的framework 层封装了 ibmmq, oracleaq 不同的message queue 实现 那么在application 或者 use case 层 我们不需要同时使用这两种不同的实现, 我们就把ibmmq , oracleaq 的jar 指定成 optional。 这样client 具体使用时再来显式指定。
3, application 可依赖framework, 所以它的有些dependency 是framework 传递下来的, 我们就不再application parent pom 中 指定了。 同样原则也用于 use case 的parent pom。
4, framework, application 跟 use case 三层分别属于不同的svn repository, 它们有不同的版本。 不同的版本发布周期。 基本上是framework 最稳定, application 次之。use case 变化反映了业务,变化最频繁。
由于公司,项目性质决定了这个地方是没有任何代码的, 只有些原则方面的东西出现在这个地方了。
分享到:
相关推荐
详细介绍 Maven 的核心功能,包括项目构建、依赖管理和生命周期等。解释如何使用 Maven 构建项目,包括编译、打包、测试和部署等操作。介绍如何使用 Maven 管理项目的依赖关系,以及如何通过声明式配置来简化项目的...
基于ACTIVITI引擎进行开发,利用maven进行依赖管理,本文件列出来具体的依赖项
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。 书中讲解了网络基础知识、TCP/IP基础知识、数据链路、IP协议、IP协议相关技术、TCP与UDP、路由协议、应用协议、网络安全等内容,引导读者了解和...
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9 使用maven完成项目的构建,项目构建包括:清理,编译,部署等过程,maven将这些过程规范为一个生命周期 maven管理项目生命周期都...
Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn]。 Maven是基于项目对象模型(POM),通过一小...
Maven依赖管理 Maven自动化部署 Maven Web应用 Eclispe IDE集成Maven NetBeans IDE集成Maven Eclipse构建Maven项目 转换基于Maven的Java项目支持Eclipse IDE 转换基于Maven的Web应用程序支持Eclipse IDE 使用Maven...
Maven依赖管理项目构建工具
Apache Maven是一个开源的软件项目管理和理解工具。可以通过maven来管理项目的构建、依赖、报告和文档。 镜像网站的下载速度太慢了,直接将我下载的分享一下,节约大家时间。
基于SSM的人事管理系统源码+项目说明(使用Maven进行依赖包控制).zip 基于SSM的人事管理系统源码+项目说明(使用Maven进行依赖包控制).zip 基于SSM的人事管理系统源码+项目说明(使用Maven进行依赖包控制).zip ...
这是一个springboot+maven写的demo,主要演示springboot项目通过maven插件,将依赖与配置文件打包到jar包外部,实现灵活的项目管理.仅供参考学习
依赖管理:Maven通过中央仓库(Central Repository)来管理项目所需的第三方库和框架的依赖,开发人员只需在pom.xml中声明所需的依赖,Maven就可以自动下载并管理这些依赖。 项目报告:Maven提供了一系列插件用于...
Maven , 用于Java项目的构建 , 依赖管理 , 项目信息管理的项目管理工具.是Apache组织旗下的开源项目.它的核心功能是一个具有跨平台特性的构建工具 , 帮助我们自动化构建 , 并提供一个完整的优化的构建生命周期模型 ,...
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...
2、依赖管理:Maven能够自动解决项目的依赖关系,你只需要在pom.xml中声明你的项目依赖的库和版本号,Maven会自动下载并管理这些依赖。 3、项目生命周期管理:Maven提供了一系列的构建阶段(如编译、测试、打包、...
这个文档讲的是利用MyEclipse的自带maven插件进行web项目的打包管理,处理本地的web项目的依赖,通过war进行直接依赖打包,十分方便的web管理内容
spring springmvc mybatis三大框架整合,用maven进行管理jar包,项目导入即可运行
Maven超级详细文档(依赖管理项目构建工具)
Maven依赖管理项目构建工具(保姆级教学)
前后端项目启动教程课程,配套后端Maven依赖包,适用于SpringBoot3.1版本,用于 https://blog.csdn.net/qq_41464123?type=download 系列项目...在Maven中,我们可以使用依赖管理器来管理项目所需的外部JAR包或库文件。
Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理。 2.下载及安装 下载最新版 Maven:apache-maven-3.2.1-bin.zip。官网下载:http://maven.apache.org/download.cgi.(本人所用为3.0.5) 3....