模块化之Spring3.0 web fragment和gradle构建项目
1.背景
模块化开发很久以前就开始普及的概念。但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多。或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧、任务中、deadline时间段,从而更将模块化抛掷脑后。先要解决生存问题嘛,举个不恰当的例子,饱暖思淫欲。
从2014年底2015年初,我负责的项目就处在了“饱暖思淫欲”的阶段,于是我也开始想开始朝着方面来实现。确实刚开始就遇到了问题,有心杀敌无力回天。
一晃2年过去了,期间换了一家公司,学习了一些新的思想和技术。慢慢的从程序员开始响架构师转变,模块化更是成为了我掌中挚爱,一定要让它开花结果。
程序员们经常谈及架构一次,而架构师似乎也变成了模糊而又神秘的概念。从一个角度来说,架构其实就是组建和组建之间交互而组成。
工欲善其事必先利其器,不管所从事的行业业务多么复杂,技术多么高深,我想一切从简单的做起,一步一步走上开花结果的道路。
2.实现思路
对于系统的真实架构,可以畅谈三天三夜,可以出书可以当作一门课程教学。在此我们假设我们的系统简单到如下图的结构。因为任何架构的终极武器都离不开“分而治之”,从不同角度去“分而治之”,所有说到底经过层层分析,我们还是需要对某一个小模块进行分析实现,即逻辑视图+物理视图分析。
如图所描述的,我们希望最后整个系统的组成不是一个java web项目。而是有一个主项目(master project)和多个子项目(slave project),主项目通过引用子项目构成整个项目。项目中只有代码(包括主项目和子项目),jar包采用dependency的形式,从而避免了传统jar包全在lib中的形式,一个项目被jar包撑的太大太臃肿,而对于jar版本的控制也没办法很好的管理。
如果有一天,我们需要开发一个类似于A功能,但是又不完全一样,不管我们采用何种方式升级、更新A功能,不会影响其他模块,而A功能本身又是很容易替换和更新。
针对上述描述,简单的构建这么一个结构,我选择了spring3.0 web fragment作为切割模块的核心工具,gradle构建项目,解决jar依赖问题。
3.实现步骤
开发工具:Eclipse4.5.2
gradle版本:Gradle2.14.1
3.1新建主项目(dynamic web project)
Eclipse新建dynamic web project很方便,不做过多描述。
3.2新建第一个子项目(Web Fragment Project【不是gradle项目】)
第一步:选择项目类型
第二步:填写项目名称,注意红框内容,选好依赖的主项目。
第三部完成:点击finish后,项目结构如图:
第四步:编写一个servlet,新建一个包,在该包下编写servlet,如图:
第五步:编写jsp
第六部:编写fragment-web.xml,配置servlet的跳转,
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment id="beforemodule" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
<!-- 指定该Web模块的唯一标识 -->
<name>beforemodule</name>
<welcome-file-list>
<welcome-file>test.jsp</welcome-file>
</welcome-file-list>
<ordering>
<!-- 用于配置该Web模块必须位于哪些模块之前加载 -->
<before>
<!-- 用于指定于其他所有模块之前加载 -->
<others />
</before>
</ordering>
<servlet>
<servlet-name>module3Servlet</servlet-name>
<servlet-class>beforemodule.model3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>module3Servlet</servlet-name>
<url-pattern>/servlet3/module3</url-pattern>
</servlet-mapping>
</web-fragment>
第七步:缺少依赖的jar可以加一下,如servlet-api.jar
第八步:完整的项目结构如图:
3.3新建第二个子项目(Web Fragment Project【不是gradle项目】)
过程和3.2过程一样,唯一不同的是,用Eclipse自动生成的fragment-web.xml中,带有display-name标签,要去掉该标签。因为当主项目同时引用2个fragment项目时,项目会系统生成display-name,若配置文件里有这个标签,tomcat启动会报错。
3.4新建第二个子项目(Web Fragment Project【不是gradle项目】)
3.5新建第一个gradle子项目(NEW GRADLE PROJECT)
第一步:新建gradle项目
第二步:修改build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
//Servlet
compile "javax.servlet:jstl:1.2"
compile 'javax.servlet:servlet-api:2.5' // 编译期
}
第三部:项目结构如图,类和jsp内容同3.2内容一样,仅名字有区别。
第四部:refush gradle project
右键项目,选择gradle,刷新gradle项目。添加jar依赖。
3.6新建fragmentproject,convert to gradle子项目
配置文件如3.5build.gradle内容。
3.7将主项目关联4个子项目即可。
4.遇到的问题及解决
4.1 fragment和gradle如何在一个项目中共存?
解决以下两个问题:
1.新建gradle项目,通过proejct facets设置web fragment project。
2.新建web fragment project,convert to gradle project。
4.2 通过Depolyment Assembly引用多个项目时报错,The display name was defined in multiple fragments with different values including fragment with name [XXX],一个项目时不抱错?
在Eclipse创建工程的时都自动生成了display这个标签,但每个web-fragment.xml中的东西又都会被统一解析,因此导致display元素定义重复了。
5.说明
以上内容写的比较仓促,在日常工作过程中遇到了些疑问,顾记录下来以作查阅。存在一些描述不足和不详细。
模块化之Spring3.0 web fragment和gradle构建项目的更多相关文章
- 使用Gradle构建项目
使用gradle构建项目之前,咱们先聊聊maven,使用maven构建项目和配置主要 接下来正式使用gradle来构建项目的和步骤: 1.下载源码 2.下载gradle 1.下载地址:https:// ...
- "CreateProcess error=206, 文件名或扩展名太长。",用gradle构建项目创建mapper文件时提示这个错误,是Windows Gradle长类路径问题,官方已经修复
用gradle构建项目mapper文件时,提示这个错误,这个是Windows Gradle长类路径问题, gradle官方已经解决了这个问题. 官网给出的解决方法地址:https://plugins. ...
- vue2.0+webpack+vuerouter+vuex+axios构建项目基础
前言 本文讲解的是vue2.0+webpack+vuerouter+vuex+axios构建项目基础 步骤 1.全局安装webpack,命令 npm install webpack -g 注意,web ...
- 慕课网springboot博客系统开发(一)----spring initializr的使用 gradle构建项目
spring initializr工具的地址:https://start.spring.io/:通过它可以很方便的创建springboot项目 这里我们选择使用gradle作为项目的构建工具,此spr ...
- Android 加速Gradle构建项目
1. 升级gradle 进入项目文件夹$project/gradle/wrapper/gradle-wrapper.properties, 使用最新的gradle. 修改替换为最新的 distribu ...
- gradle构建项目失败:Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9
Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to ...
- 在IDEA中用Gradle构建项目时使用lombok以依赖出现出错
情景: 之情一直是使用Maven构建的项目并且导入依赖后都可以正常使用,但是在换成Gradle时出现了不论使用什么版本的lombok的依赖都会提示@Sl4j注解的log找不到,但是编辑界面是不会报错的 ...
- [转] 使用Spring Boot和Gradle创建项目
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者 ...
随机推荐
- 40个Java多线程问题总结
前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...
- WPF自定义控件第二 - 转盘按钮控件
继之前那个控件,又做了一个原理差不多的控件.这个控件主要模仿百度贴吧WP版帖子浏览界面左下角那个弹出的按钮盘.希望对大家有帮助. 这个控件和之前的也差不多,为了不让大家白看,文章最后发干货. 由于这个 ...
- 像黑客一样使用 Linux 命令行
前言 之前在博客园看到一篇介绍 IntelliJ IDEA 配置的文章,它里面用的是 gif 动态图片进行展示,我觉得很不错.所以在我今天以及以后的博文中,我也会尽量使用 gif 动图进行展示.制作 ...
- 作为Coder的利器记载
工作近三年,使用PC快六年,拥抱Mac整一年,投具器石榴裙三年.14年第一次被同事推荐Everything,开启了JeffJade对工具的折腾之旅,并乐此不疲.时去两年,这必然是消耗了一些时间,但对效 ...
- Windows操作系统下tomcat安装版图文教程
下载tomcat安装文件,官方下载地址是:http://tomcat.apache.org/,本文以tomcat-7.0.26版本为例进行安装过程的说明: 1.双击apache-tomcat-7.0. ...
- 【JAVA框架】Hibernate 与Mybatis 区别
Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关 ...
- [C#] Linq To Objects - 如何操作文件目录
Linq To Objects - 如何操作文件目录 开篇语: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述> 社会反响不错,但自己却始终觉得缺点什么!“纸上得来终觉浅,绝 ...
- RMAN异机恢复快速参考
应用场景:服务器A为正常运行的生产环境,需要在服务器B上部署一套相同环境做测试. 数据库环境:RHEL6.4 + Oracle 11.2.0.4.7 一. 服务器A备份数据库 1.1 在线备份(数据库 ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
- WPF入门:数据绑定
上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...