`
juvenshun
  • 浏览: 1588887 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

现实中的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,那么,这两章内容必定能够很好的帮助你开始。

12
5
分享到:
评论
13 楼 CobraCoder 2009-02-25  
CobraCoder 写道

楼主,又来请教了,关于多模块项目,我的问题是它除了重用以外,还有其它什么好处,也就是我该用什么思路来设计多模块pom。还有个问题是,我按照这个结构做好了A项目,这时候有了新的需求,做一个B项目,B项目该如何加入到A项目中,我想要的方式,就如同插件一般,不需要我重新打包A项目,而且我可以在发布的时候,选择是发布A还是B,或者一起发布,我该怎么做?谢谢。如果我复制一个A项目的结构,这时候module的配置数量会翻翻,以后会让人觉得很难管理。

========================================================
不好意思,楼主,上面的问题,其实你给了答案,刚看到你的另一篇文章,Maven最佳实践:划分模块。我先实践体会一下,再请教。
12 楼 CobraCoder 2009-02-25  
楼主,又来请教了,关于多模块项目,我的问题是它除了重用以外,还有其它什么好处,也就是我该用什么思路来设计多模块pom。还有个问题是,我按照这个结构做好了A项目,这时候有了新的需求,做一个B项目,B项目该如何加入到A项目中,我想要的方式,就如同插件一般,不需要我重新打包A项目,而且我可以在发布的时候,选择是发布A还是B,或者一起发布,我该怎么做?谢谢。如果我复制一个A项目的结构,这时候module的配置数量会翻翻,以后会让人觉得很难管理。
11 楼 juvenshun 2009-02-20  
CobraCoder 写道

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)的依赖复用。
10 楼 CobraCoder 2009-02-20  
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呢?
9 楼 juvenshun 2009-02-20  
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即可,但是,那应该是没有选择的选择。
8 楼 CobraCoder 2009-02-20  
juvenshun,我仔细研究了多模块的配置,但是我有一个问题,始终想不明白,我该如何布局我的webapp项目,例子里只有一个webapp,如果我有多个,我应该如何实现webapp的引用,比如我有一个spring-security项目,包含了登录验证,我写了一个employee管理项目,这时候我需要用不同的角色去登录测试我的employeee webapp,但是我不希望组装测试,因为这样会很麻烦,我只想在eclipse直接运行我的employee项目,就可以获得seciury项目的登录页面,进行登录,测试employee项目,请楼主指教,谢谢!
7 楼 lovefly_zero 2008-09-22  
duduwolf 写道

楼主辛苦了,Maven所谓的多模块配置我一直搞的云里雾里,望楼主以后的文章里能着重介绍下,这两天我用Nexus搭建了一个仓库私服,你可以闲暇时看看,顺便指导下我,看还有哪儿不合适,地址为:http://repo.duduwolf.com,如果没问题,我希望先把这个私服发布出去,供广大网友使用。

都登陆不进去 啥都看不出来
6 楼 maomaocong 2008-09-17  
赞,楼主是好人。。。。。。。
5 楼 tywo45 2008-09-17  
把springside的pom学会了,也就学会了模块的化分了:)
4 楼 juvenshun 2008-09-17  
有机会我会写,当然,如果书里有详细解释,我就不会班门弄斧,:)
我访问了你暴露的nexus,又不能登陆,看不出问题。谢谢你的无私,呵呵。
引用
楼主辛苦了,Maven所谓的多模块配置我一直搞的云里雾里,望楼主以后的文章里能着重介绍下,这两天我用Nexus搭建了一个仓库私服,你可以闲暇时看看,顺便指导下我,看还有哪儿不合适,地址为:http://repo.duduwolf.com,如果没问题,我希望先把这个私服发布出去,供广大网友使用。
3 楼 duduwolf 2008-09-16  
楼主辛苦了,Maven所谓的多模块配置我一直搞的云里雾里,望楼主以后的文章里能着重介绍下,这两天我用Nexus搭建了一个仓库私服,你可以闲暇时看看,顺便指导下我,看还有哪儿不合适,地址为:http://repo.duduwolf.com,如果没问题,我希望先把这个私服发布出去,供广大网友使用。
2 楼 xl515331 2008-09-16  
先顶

最近有些忙

有时间一定要看看

1 楼 lovefly_zero 2008-09-16  
辛苦了,楼主

相关推荐

Global site tag (gtag.js) - Google Analytics