通过上面基础知识的准备,我们已经对Maven基本概念有了一定认识。现在,让我们以一个项目案例开启Maven应用开发之旅吧!
Note: 该案例参考自Maven实战,源码已经提供在附件中。文章只挑选Maven配置要点讲解,在读文章的时候读者应该配合源码观看。
1. 案例场景:
我们要开发一个账号服务系统,实现账号注册,登录,验证码,持久化,邮箱服务的基本功能。
模块划分如下:
account-web : 交互入口
account-service : 核心服务模块,负责业务组织与模块调用
account-persist : 持久化支持
account-captcha : google开源验证码模块
account-email : 邮件服务
2. 聚合与继承 account-parent
目前已经对各模块进行了简单的划分,每一个模块都是一个Maven项目(带pom.xml),可独立开发测试的。
我们在外层做一个叫 account-parent 的模块,将各个子模块聚合起来,变成一个项目:
聚合模块 account-parent:
通过关键字 modules 实现了模块聚合,同时,各模块间会存在一些共享资源(如:都依赖spring),那么我们就可以将这部分共享资源放在 account-parent 中,子模块以继承的方式实现共享资源访问。
共享资源定义:
Note : 如果不确定该依赖在所有的子模块中都会用到,就把它放到<dependencyManagement/>元素中,表示可选的继承依赖。
到这里,我们先切换到 account-parent 目录下,运行命令 mvn clean install (前面章节的clean, default生命周期命令哦)
3. account-email
首先这是一个普通的Maven项目,结构如下:
该模块通过 javax.mail 实现邮件发送功能:
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>${javax.mail.version}</version> </dependency>
public interface AccountEmailService { void sendMail(String to, String subject, String htmlText); }
通过关键字 parent 和父模块坐标,继承了 account-parent:
<parent> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-parent</artifactId> <version>1.0.0-SNAPSHOT</version> </parent>
因为 account-email 是一个独立的模块,所以我们可以切换到 account-email 目录下,单独对它构建:mvn clean test
可以看到AccountEmailServiceTest的测试已经通过了。
4. account-captcha
该模块通过使用三方构件,实现验证码生成的功能,配置与email相似。由于该校验码构件并没有提交到中央仓库,所以需要自定义远程仓库路径:
<repositories> <repository> <id>sonatype-forge</id> <name>Sonatype Forge</name> <url>http://repository.sonatype.org/content/groups/forge/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
5. account-service
这是对外提供业务调度的模块,需要依赖其它的模块才能完成构建行为:
<dependency> <groupId>${project.groupId}</groupId> <artifactId>account-email</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>account-persist</artifactId> <version>${project.version}</version> </dependency>
6. account-web
该模块负责前端交互,依赖于 account-service 实现业务的管理
<dependency> <groupId>${project.groupId}</groupId> <artifactId>account-service</artifactId> <version>${project.version}</version> </dependency>
同时,因为是Web项目,我们需要将它的打包方式改为war包(缺省jar):
<packaging>war</packaging>
还可以看到项目依赖于容器提供的包(前面章节的依赖范围哦):
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </dependency>
为了方便开发,还提供了jetty容器插件的集成:
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.1.0.RC1</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webAppConfig> <contextPath>/account</contextPath> </webAppConfig> </configuration> </plugin>
因为有一个邮件发送的模块,所以在运行项目之前,还需要配置一下邮件服务器的信息:
开启QQ邮箱的SMTP功能:
7. 运行项目
现在我们已经认识了项目主要的知识点,回到 account-parent 目录,重构建一下项目 mvn clean install
然后再到 account-web 目录,执行 mvn jetty:run ,访问 http://localhost:8080/account 就可以看到项目了。
到QQ邮箱中已经可以看到激活邮件了:
项目对于初学者可能比较复杂,需要配合源码,多运行琢磨一下!
资料参考:
http://maven.apache.org
Maven实战 - 许晓斌
相关推荐
Maven整合SSH案例 ************************************************************************************* 注意:运行前请配置Maven环境,和修改config.properties中数据库名称用户和密码,并且修改Tuser中的...
进阶技术与案例分析:针对进阶开发者,提供深入的技术探讨和案例分析,助您深入理解SSM的高级特性。 实战项目与经验分享:通过实际项目实战,让您在实践中掌握SSM的运用,同时分享经验与心得,让您少走弯路。 三、...
使用Maven核心概念介绍(坐标、依赖、仓库、插件、生命周期等)、Maven与第三方Elicpse整合及如何在Eclipse中使用Maven、什么是私服、Maven为什么使用私服、Maven私服Nexus的安装使用、如何使用Maven构建Web应用、使用...
声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&创建DB,配置好maven便可运行 maven构建项目&问题:...
这是基于Maven搭建的并结合SpringMVC和Hibernate框架实现的Web应用程序,具体功能是通过前端请求从而将数据持久化到MySQL数据库。
本人java-web小项目对应的maven工程包,主要用到了mybatis、maven、jsp、tomcat、servlet等知识,可通过本项目充分应用这些知识。文章可在本人专栏java_web中找到,链接:...
该案例是一个简单可以直接使用的maven+Dobbo+Zookeeper+SpringMVC案例
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
mvc三层架构应用案例简单代码 详见其中brand-demo 技术:mybatis+maven+mysql+JSP+HTML+servlet+JS
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
本书内容全面而系统,Maven的原理、使用方法和高级应用尽含其中;注重实战是本书的另一个特点,不仅在各个知识点都辅有大量的小案例,而且还有一个综合性的案例贯穿全书。如果你想使用Maven,或正在使用Maven,本书...
《现代Java开发者的Maven实战手册:构建·管理·优化》不仅涵盖了Maven的基础知识和核心概念,还通过一系列精心设计的实战案例,引导学员探索Maven在实际项目中的应用,从而帮助他们提升构建和管理Java项目的效率和...
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
背景案例第5章 坐标和依赖第6章 仓库第7章 生命周期和插件第8章 聚合与继承第9章 使用nexus创建私服第10章 使用maven进行测试第11章 使用hudson进行持续集成第12章 使用maven构建web应用第13章 版本管理第...
系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有...
本书内容全面而系统,Maven的原理、使用方法和高级应用尽含其中;注重实战是本书的另一个特点,不仅在各个知识点都辅有大量的小案例,而且还有一个综合性的案例贯穿全书。如果你想使用Maven,或正在使用Maven,本书...