本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。

一、项目结构

multi-module-project是主工程,里面包含两个模块(Module):

  1. web-app是应用层,用于界面展示,依赖于web-service参的服务。
  2. web-service层是服务层,用于给app层提供服务。

二、构建项目

2.1 Parent Project

新建一个空白标准maven project(不要选择Create from archetype选项)

填写项目坐标

得到一个标准的maven项目,因为该项目是作为一个Parent project存在的,可以直接删除src文件夹。

2.2 增加web-app模块(Module)

选择从archetype创建(选择webapp选项)

groupId和version继承自Parent project,这里只需要填写artifactId即可。

2.3增加web-service模块

用同样的方法创建web-service模块(不过该模块是一个空白maven标准项目,不要从archetype创建)

2.4 得最终项目结构

2.5 关键几点

  1. Parent project和各个Module拥有独立pom文件,他们之间的关系后续会专门写文章介绍。
  2. Parent project用于组织不同的Module,不实现逻辑
  3. Module集成Parent project的groupId和version,Module只需要指定自己的artifactId即可。

三、添加项目依赖

上面的操作是添加web-app对web-service模块的依赖,完成上述操作后web-Service中public的类已经在web-app模块中可见了。但是这个时候在app模块使用了service模块中的类,通过maven进行编译(compile)的时候还是会报错XX找不到(XX为service模块的类),要解决这个问题需要在app的pom中增加对service的依赖:

   <dependency>
<groupId>com.cnblogs.kmpp</groupId>
<artifactId>web-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

以上,项目依赖的添加已经完成

四、开始编程

4.1 web-service模块编程

在web-service模块中增加一个Service类(SimpleService.java)

4.2 web-app模块编程

在web-app模块增加一个Servlet,并且调用web-service模块的SimpleService类的getServiceDescription方法。

4.3 配置Servlet

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name> <servlet>
<servlet-name>Simple</servlet-name>
<servlet-class>com.cnblogs.kmpp.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Simple</servlet-name>
<url-pattern>/simple-servlet</url-pattern>
</servlet-mapping>
</web-app>

五、运行

在web-app的pom中增加j2ee的依赖,以及jetty插件的依赖。运行jetty。详情

在浏览器中输入:http://localhost:8080/web-app/simple-servlet

得到运行结果:

六、结束

至此,本文完整演示了使用maven构建多模块项目。

Maven学习总结(10)的更多相关文章

  1. Maven学习总结(10)——使用Maven编译项目gbk的不可映射问题

    Maven学习总结(十)--使用Maven编译项目gbk的不可映射问题 一.问题描述 今天在MyEclipse中使用Maven编译项目源代码时,结果如下了如下的错误 百思不得其解啊,java源代码在M ...

  2. Maven学习总结(一)——Maven入门

    原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3498271.html 感谢! 一.Maven的基本概念 Maven(翻译为"专家"," ...

  3. Maven学习:Eclipse使用maven构建web项目(转)

    Maven学习:Eclipse使用maven构建web项目(转) 8.更改class路径:右键项目,Java Build Path -> Source 下面应该有4个文件夹.src/main/j ...

  4. maven学习二(dependencies)

    在前面一篇文章maven学习一(HelloWorld工程)已经对maven有了基本介绍,本文开始介绍maven依赖,通过如何如何增加log4j来学习maven的dependencies no-depe ...

  5. (转)Maven学习总结(九)——使用Nexus搭建Maven私服

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(九)——使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目 ...

  6. 【Maven学习】Nexus OSS私服仓库的备份与迁移

    背景 在上一篇博客 [Maven学习]Nexus OSS私服仓库的安装和配置 中,我们已经在机房搭建好了新的Nexus OSS私服仓库.下面是两个版本的Nexus OSS私服仓库的对比图. 老的Nex ...

  7. Maven学习总结(8)——使用Maven构建多模块项目

    Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层). ...

  8. Maven学习总结(7)——eclipse中使用Maven创建Web项目

    Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...

  9. Maven学习总结(5)——聚合与继承

    Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module> ...

随机推荐

  1. 3DSMAX 安装失败

    AUTO Uninstaller 更新下载地址 1.选择3DSMAX 2.选择3DSMAX的版本 3.点击“开始卸载”,然后重新安装就可以了

  2. Unity 组件.name

    组件.name  指的是组件所在游戏对象的名字,例如: Animation m_animation; m_animation =GetComponent<Animation>(); m_a ...

  3. Andrew Ng 的 Machine Learning 课程学习 (week4) Multi-class Classification and Neural Networks

    这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解 ...

  4. Http Client 源码分析

    /** * 此接口仅代表HTTP请求执行的最基本约定. * 它对请求执行过程没有任何限制或特定的细节,并将状态管理.身份验证和重定向处理的细节留给单个实现. */ public interface H ...

  5. MVC execl 导入导出

    MVC execl 导入导出 <input id="xls" name="xls" type="file" style="w ...

  6. Redis入门--(一)简介NoSQL

    1.什么是NoSql? 2.为什么需要NoSQL? 互联网经历了1.0和2.0的发展: web1.0 是早期新浪,雅虎等只能浏览,不能交互: 传统关系型数据库在应付web2.0这种动态网站的时候力不从 ...

  7. The seventeenth day

    A good book is a good friend 好书如挚友

  8. 使用axios请求发送数据

    之前一直没有用成功,今天看了一些博客,学会了使用axios插件 1.首先就是下载依赖啦 2.main.js import axios from 'axios'Vue.prototype.$axios ...

  9. 将Android工程打成jar包之后对资源的调用。

    Android工程不能完整的打包成jar包.这个主要是R文件导致的,但是我们可以将除了资源文件中的所有东西都打到jar包中.Activity.View等等类. 提供jar包的同时,还需要提供资源文件. ...

  10. python 修改xml文件

    在百度知道里面有人问了这么一个问题: 有一个xml文件:<root>text <a/> <a/> ...这里省略n个<a/> <root>想 ...