Maven
maven项目下多模块构建
使用maven提供的多模块构建的特性完成 maven 环境下多个模块项目的管理与构建
这里以四个模块为例来搭建项目
模块 maven_parent ————父项目工程也就是基模块
模块 maven_dao ————数据库的访问层,如jdbc操作
模块 maven_service ————项目的业务层
模块 maven_controller ————控制层
创建父项目 maven_parent
创建空maven项目,就是不勾选模板直接创建的一个干净的项目工程
创建 maven_dao模块
选择模板的时候千万别选错了看清楚是maven的再选!!
创建maven_service模块
方法和创建dao一样
创建maven_controller模块
这次使用webapp模板,因为是个Web模块需要和浏览器打交道
因为webapp模板main目录下没有java包 所以我们需要手动创建,并标记为源码文件夹。如下:
修改模块配置
- 设置JDK版本
- 删除多余配置
以上设置修改方法在Maven(上)已经说过了,就不细说了。
设置模块之间的依赖
因为模块之间相互依赖,直白来说就是一个模块需要调用另一个模块的方法,所以我们需要配置依赖关系。
依赖关系为:controller—调用—service—调用—dao
配置依赖也很简单,例如service依赖dao,那么就在service的配置文件里加入dao模块的坐标,例如在service里加入坐标如下:
<dependencies>
<dependency>
<artifactId>maven_dao</artifactId>
<groupId>com.xxxx</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
依赖全部设置好之后,此时启动tomcat,大概率会报错,别慌,将每个模块包括父工程install一下:
此时,大概率还是install报错不成功,找了好长时间的原因,最后得出结论:需要先install一下父工程,再从小到大的顺序挨个install 。如先install Dao模块 再install sevice模块,最后install controller模块,因为有一层依赖关系,所以从小到大顺序。
此时启动 tomcat,你可能还会遇到 tomcat 启动了,但是请求访问的时候报错500,别慌,这是因为你配置的 servlet 依赖和 tomcat 里的 servlet 包冲突了,有两个版本不同的包了,此时,解决办法是在你的 servlet 依赖下加上作用域限制,让自己配置的servet依赖只在编译时生效,而运行时使用的就是 tomcat 的 servlet 包了。如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--作用域限制-->
<scope>provided</scope>
</dependency>
改完再不行的话就把有这个依赖的这个模块clean一下再install一下应该就不会再有错了,毕竟重启可以解决99%问题哈哈哈哈。
Maven的打包操作
对于企业级项目,无论是进行本地测试,还是测试环境以及最终的项目上线,都会涉及到项目的打包操作。对于每个环境下的打包,对应的项目所需要的配置资源都会有所区别,实现打包的方式有多种,比如早期使用ant,或者通过idea自带的打包功能实现打包,但是当项目很大需要的外界配置很多时,此时打包的配置就会异常复杂,对于maven项目,我们可以通过 pom.xml配置的方式来实现打包时的环境选择,相比其他的打包工具,maven只需要通过简单的配置,就可以完成不同环境下项目的整体打包。
比如下面这样一个项目,项目中配置了不同环境下项目所需要的配置文件,这时候需要完成不同环境下的打包操作,此时通过修改pom.xml 如下:
1. 建立对应的目录结构
使用idea创建项目,目录结构可能会缺失,需要通过手动添加对应的目录,java和resources文件夹,并标记文件夹类型。
添加不同环境下的配置文件:开发环境,测试环境,正式环境。
2. 添加 Profile 配置
<!-- 配置三套环境,分别为dev(开发环境),product(正式环境),test(测试环境)-->
<profiles>
<!-- dev环境-->
<profile>
<!--不同环境Profile的唯一id-->
<id>dev</id>
<properties>
<!--此处<env>这个标签是自定义的,随便写, 最后会用标签里的值替换整个标签,这个标签里的值需要与项目目录下的环境文件夹名保持一致!!!-->
<evn>dev</evn>
</properties>
<!-- 将该环境设置为默认活动环境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- test环境-->
<profile>
<id>test</id>
<properties>
<evn>test</evn>
</properties>
</profile>
<!-- product环境-->
<profile>
<id>product</id>
<properties>
<evn>product</evn>
</properties>
</profile>
</profiles>
3. 设置指定环境资源文件夹下的资源文件可以被导出,也就是资源过滤的问题
<build>
<!-- 让指定目录下的资源文件可以被导出-->
<resources>
<resource>
<directory>src/main/resources/${evn}</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
4. 打包
打包的资源最终会在项目下的target目录下生成
最简单的打包方式:直接package
第二种打包方式:指定打包环境
至此,完结。