- 浏览: 1596106 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
payton321:
dao,util,servie,基础模块应该是maven项目, ...
Maven最佳实践:划分模块 -
AdrainHuang:
深有体会,我这边已经 给项目坑死了,依赖关系太复杂,基本没人敢 ...
Maven最佳实践:管理依赖 -
远方_张涛:
赞赞赞,生动有趣还说明问题
Maven最佳实践:版本管理 -
smartdog:
新的网站访问不了啊~~博主快更新
再见JavaEye -
smartdog:
言简意赅,厉害
Maven最佳实践:遵循约定
《Maven权威指南》第六章. 一个多模块项目 ,以及第七章. 多模块企业级项目 都已翻译完毕。
一个现实生活中的Maven项目只有一个POM文件,那是不现实的。典型的项目会和数据库交互,和Web Service交互,有自己的业务逻辑,暴露Web Service,有命令行应用程序,有Web应用程序……这个时候,必须分一下模块,松散耦合,清晰关联,增加重用等等好处不用多说。这两章内容,就是介绍怎样使用Maven的模块集成及聚合相关功能的。
看一看多模块企业级项目的模块关系图:
这里有一个父模块,一个web应用,一个命令行应用,一个持久化模块,一个业务逻辑模块,一个模型对象模块。基本上,这个图能很典型的代表很多项目的结构了。该图中,展现了模块之间的各种关系,有依赖(dependency),传递性依赖(transitive dependency),子模块(module of),继承(inherits from)。
这里配置子模块的XML片段为:
<modules> <module>simple-command</module> <module>simple-model</module> <module>simple-weather</module> <module>simple-persist</module> <module>simple-webapp</module> </modules>
配置继承的XML片段为:
<parent> <groupId>org.sonatype.mavenbook.ch07</groupId> <artifactId>simple-parent</artifactId> <version>1.0</version> </parent> <artifactId>simple-model</artifactId> <packaging>jar</packaging>
配置依赖的XML片段为:
<dependency> <groupId>org.sonatype.mavenbook.ch07</groupId> <artifactId>simple-model</artifactId> <version>1.0</version> </dependency>
关于传递性依赖,这里做个简单的解释,项目A依赖于项目B,而项目B依赖于项目C,那么项目A就自动会拥有对于项目C的传递性依赖。 如上图中,simple-webapp模块直接依赖于simple-weather模块,而simple-weather模块直接依赖于simple-model模块,那么simple-webapp就拥有对于simple-model的传递性依赖。
第七章的内容,真正涉及Maven的其实不是很多,相反,作者花了很大篇幅介绍使用Hibernate,Spring,Velocity等等较为流行的Java开源框架,这些内容也是实际开发中常常会遇见的。
项目越大,Maven所体现的优势也就越大,要真正在实际项目中使用Maven,那么,这两章内容必定能够很好的帮助你开始。
评论
楼主,又来请教了,关于多模块项目,我的问题是它除了重用以外,还有其它什么好处,也就是我该用什么思路来设计多模块pom。还有个问题是,我按照这个结构做好了A项目,这时候有了新的需求,做一个B项目,B项目该如何加入到A项目中,我想要的方式,就如同插件一般,不需要我重新打包A项目,而且我可以在发布的时候,选择是发布A还是B,或者一起发布,我该怎么做?谢谢。如果我复制一个A项目的结构,这时候module的配置数量会翻翻,以后会让人觉得很难管理。
========================================================
不好意思,楼主,上面的问题,其实你给了答案,刚看到你的另一篇文章,Maven最佳实践:划分模块。我先实践体会一下,再请教。
juvenshun 写道CobraCoder 写道juvenshun,我仔细研究了多模块的配置,但是我有一个问题,始终想不明白,我该如何布局我的webapp项目,例子里只有一个webapp,如果我有多个,我应该如何实现webapp的引用,比如我有一个spring-security项目,包含了登录验证,我写了一个employee管理项目,这时候我需要用不同的角色去登录测试我的employeee webapp,但是我不希望组装测试,因为这样会很麻烦,我只想在eclipse直接运行我的employee项目,就可以获得seciury项目的登录页面,进行登录,测试employee项目,请楼主指教,谢谢!sorry,不太明白你的意思,不过,像你的spring-security这样的模块,应该作为一个jar,而不是webapp,这样多个webapp就可以共用它了。webapp中应该只包含UI相关的东西,这么做之后,你就不需要webapp之间的依赖了。当然,webapp之间的依赖也是可以实现的,使用maven-war-plugin即可,但是,那应该是没有选择的选择。感谢您的回答,是这样的,我的项目有登录的ui,这个ui是放在security项目下的,而employee项目的则是需要security项目提供的登录ui,如果employee项目单独运行,则无法访问到security项目的ui,因为还有其他项目也需要登录ui,所以如果每个项目都放置登录ui,混乱,难于同步。不知道我是否讲明白了。是不是只能采用maven-war-plugin呢?
也许你可以试一下使用SSO(单点登录),登录模块单独部署。或者,就用mavwn-war-plugin吧,它支持web文件(如js/html/jsp)的依赖复用。
CobraCoder 写道juvenshun,我仔细研究了多模块的配置,但是我有一个问题,始终想不明白,我该如何布局我的webapp项目,例子里只有一个webapp,如果我有多个,我应该如何实现webapp的引用,比如我有一个spring-security项目,包含了登录验证,我写了一个employee管理项目,这时候我需要用不同的角色去登录测试我的employeee webapp,但是我不希望组装测试,因为这样会很麻烦,我只想在eclipse直接运行我的employee项目,就可以获得seciury项目的登录页面,进行登录,测试employee项目,请楼主指教,谢谢!sorry,不太明白你的意思,不过,像你的spring-security这样的模块,应该作为一个jar,而不是webapp,这样多个webapp就可以共用它了。webapp中应该只包含UI相关的东西,这么做之后,你就不需要webapp之间的依赖了。当然,webapp之间的依赖也是可以实现的,使用maven-war-plugin即可,但是,那应该是没有选择的选择。
感谢您的回答,是这样的,我的项目有登录的ui,这个ui是放在security项目下的,而employee项目的则是需要security项目提供的登录ui,如果employee项目单独运行,则无法访问到security项目的ui,因为还有其他项目也需要登录ui,所以如果每个项目都放置登录ui,混乱,难于同步。不知道我是否讲明白了。是不是只能采用maven-war-plugin呢?
juvenshun,我仔细研究了多模块的配置,但是我有一个问题,始终想不明白,我该如何布局我的webapp项目,例子里只有一个webapp,如果我有多个,我应该如何实现webapp的引用,比如我有一个spring-security项目,包含了登录验证,我写了一个employee管理项目,这时候我需要用不同的角色去登录测试我的employeee webapp,但是我不希望组装测试,因为这样会很麻烦,我只想在eclipse直接运行我的employee项目,就可以获得seciury项目的登录页面,进行登录,测试employee项目,请楼主指教,谢谢!
sorry,不太明白你的意思,不过,像你的spring-security这样的模块,应该作为一个jar,而不是webapp,这样多个webapp就可以共用它了。webapp中应该只包含UI相关的东西,这么做之后,你就不需要webapp之间的依赖了。
当然,webapp之间的依赖也是可以实现的,使用maven-war-plugin即可,但是,那应该是没有选择的选择。
楼主辛苦了,Maven所谓的多模块配置我一直搞的云里雾里,望楼主以后的文章里能着重介绍下,这两天我用Nexus搭建了一个仓库私服,你可以闲暇时看看,顺便指导下我,看还有哪儿不合适,地址为:http://repo.duduwolf.com,如果没问题,我希望先把这个私服发布出去,供广大网友使用。
都登陆不进去 啥都看不出来
我访问了你暴露的nexus,又不能登陆,看不出问题。谢谢你的无私,呵呵。
最近有些忙
有时间一定要看看
发表评论
-
我的书《Maven实战》
2010-11-12 13:09 70219我本来已经决定停止更新该博客了,但是为了推广下我的新书《Mav ... -
m2eclipse 0.10.0发布
2010-02-22 17:34 8114本文译自 http://www.sonatyp ... -
按需构建多模块,玩转Maven反应堆
2010-01-07 19:57 29654在多模块Maven项目中,反应堆(Reactor)是一个包含了 ... -
Maven仓库的布局
2009-12-14 08:54 12020注:本文节选自我正在 ... -
Maven3初窥
2009-11-10 16:28 20843Maven3的开发已经完成大半,本周末将发布alpha-3(T ... -
Nexus 1.4.0 发布
2009-10-29 17:22 6282新完成的用户故事: [ NEXUS-463] - ... -
archtype:generate出错?
2009-10-12 00:10 8270我们常常会使用mvn archet ... -
你最常用的构建和发布管理工具是什么?
2009-09-13 15:03 13086最近Eclipse社区进行了一项调查,关注社区如何使用Ecli ... -
策划编写《Maven实战》——初步目录
2009-09-09 03:42 83212010-08-27更新 关注 ... -
Maven最佳实践:持续集成
2009-08-21 17:14 0test -
Maven最佳实践:集成web容器
2009-08-21 17:13 0test -
《Maven权威指南》完整发布,带官方PDF
2009-07-06 00:45 676382010/04/29更新 :我已 ... -
Nexus Indexer 2.0:增量下载
2009-05-14 16:33 10372原文:http://www.sonatype.com/peop ... -
Maven最佳实践:版本管理
2009-04-29 00:04 125187什么是版本管理 首先,这里说的版本管理(version ma ... -
Maven最佳实践:Maven仓库
2009-04-01 17:42 111194什么是Maven仓库 在不用M ... -
Maven中央仓库的中国镜像
2009-03-31 22:53 45961(2011-01-27更新,由于私人原因,该镜像已关闭,在此致 ... -
Nexus入门指南(图文)
2009-03-15 23:07 147768Nexus介绍 Nexus 是Maven仓 ... -
“第十七章 编写插件” 发布
2009-03-09 17:16 3930又是漫长的一章内容,但如同本书的任何一章一样,由于原作者都是M ... -
Maven最佳实践:管理依赖
2009-02-23 16:50 28435"If I have seen further it ... -
m2e:为Eclipse引入Maven(下)
2009-02-04 16:19 30383译自:http://www.sonatype.co ...
相关推荐
Maven的出现解决了这一痛点,通过“坐标”系统,将jar包统一管理在本地仓库,需要使用时,项目中只需引用jar包坐标即可,Maven自动下载所需的jar包到本地仓库中,这样既节省了存储空间,又避免了版本冲突和文件混乱...
4. **Java源代码**:项目中的Java类,包括业务逻辑组件(services)、数据访问组件(DAOs)、控制器(controllers)等,这些都是Spring框架的核心组成部分。 5. **Web应用结构**:遵循标准的Java Web应用目录结构,...
该插件没有将 maven 插件集成到复杂的 eclipse 增量构建系统中,而是利用 maven eclipse mojo(具有标准的 eclipse:eclipse 目标)来简单地从 pom 文件构建一个 eclipse 项目,然后忘记 maven 直到下一次pom 变化。...
仅Maven项目模型(pom.xml) 这些git储存库中的所有内容。 在现实世界中,您肯定会为此星座使用单独的git存储库。 如: framework.git interfaces.git application1.git application2.git 应用程序之间的循环依赖性...
在这个"SSM的垃圾分类回收平台"项目中,我们可以推测这是一个利用SSM技术栈实现的环保类应用,旨在提高公众对垃圾分类的认识并推动垃圾的有效回收。下面将详细探讨SSM框架的各个组成部分以及它们在垃圾分类回收平台...
轮训学生比赛 一个基于Maven的Java项目,旨在根据参加锦标赛的... 该项目的灵感来自现实生活中的板球足球锦标赛。 每个团队的积分也保持不变,也有可能找到比赛的获胜者。 还为项目的每个Java类编写了JUnit测试用例。
在本项目中,Spring用于管理对象的生命周期和依赖关系,实现业务逻辑层的解耦。 2. **Spring MVC**:Spring MVC是Spring框架的一部分,专为Web开发设计。它处理HTTP请求,将请求映射到处理器,并负责视图渲染。在本...
在LocalWarehouse项目中,Maven扮演着核心角色,帮助我们管理项目的依赖关系,构建工件,执行测试,甚至自动化部署。Maven的POM.xml文件是整个项目的心脏,它定义了项目属性,包括项目版本、依赖库、构建配置等,...
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此医疗...
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此商城...
依照这一现实为基础,设计一个快捷而又方便的网上少儿编程网上报名系统是一项十分重要并且有价值的事情。对于传统的少儿编程网上报名系统控制模型来说,少儿编程网上报名系统具有许多不可比拟的优势,首先是快速更新...
描述中的“包含我的梦想,想法和项目,这些梦想,想法和项目正在或即将成为现实”暗示这个“孵化器”里面存储的不仅有概念和想法,还有实际的项目代码或文档,表明作者正在进行或将要进行把这些想法转化为实际行动的...
物体检测是基于OpenCV的Android项目中的核心部分,常见的方法有Haar级联分类器、HOG+SVM、YOLO、SSD等。以下是几个基本步骤: 1. **加载模型**:加载预先训练好的物体检测模型,如Haar特征级联分类器的XML文件。 2...
综上所述,基于Java的车位租赁管理系统项目结合了Java语言的优势,通过科学的软件工程方法,实现了车位资源的有效管理,解决了现实生活中车位紧张的问题。该项目的成功实施,不仅体现了Java在实际项目开发中的应用...
项目中会涉及到表的设计、SQL查询、事务处理等内容。 7. **前后端交互**:使用JSON格式进行数据交换,前端通过Ajax技术异步请求后端数据,实现页面的动态更新。 8. **前端技术**:HTML、CSS和JavaScript是构建用户...
【标题】"基于SSM的物业管理系统(有报告) Javaee项目 ssm项目...对于JavaEE项目,还需要掌握Maven或Gradle等构建工具,以及Git进行版本控制。此外,良好的软件工程实践,如代码规范、单元测试和持续集成也是必要的。
6. **Maven/Gradle**: 作为Java项目构建工具,Maven或Gradle用于管理项目的依赖关系,构建工件(如JAR或WAR文件),并执行自动化任务,如测试和打包。 7. **版本控制**: 项目可能使用Git进行版本控制,便于协作和...
在Java项目中,通常会涵盖以下几个重要的知识点: 1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if-else,switch,for,while等)以及方法的定义与调用。这些是所有编程的基础,也是理解和编写...
在本项目中,"ARCameraService"可能是一个具体的Service类,涉及到增强现实(AR)相机服务的业务逻辑。这可能包括处理AR相机的启动、停止、捕获图像等相关操作,这些操作可能需要与数据库交互,或者调用其他系统的...