maven工程拆分与聚合思想
jar包和自己写的代码没什么区别,自己写的代码也可以打包成jar包,只不过jar中是事先经过编译,已经是class文件
而我们的dao层,卖家和买家查询数据库用的都是dao层,这里就出现共用的东西,
也就是说,dao层和jar包的作用一样了,都可以作为共用的部分。
maven实现的就是将每部分拆分,实现共用

建立父工程
父工程我们只需要 一个pom.xml文件
选择新建project,不使用骨架


只保留pom文件,用来管理坐标
创建子模块
选中项目,创建Module
因为dao层不需要和浏览器交互,所以不需要创建webapp,不是要骨架创建
只要建java工程即可

这是会发现,父工程的pom中多了一个module

dao模块有一个父标签

接着创建service模块
创建controller模块,这是就要使用骨架webapp,和页面进行交互

删除多余信息

这样就建立好了父子关系
工程和模块的区别和联系

各模块之间本来是不存在关系的,类比班级中,刚入学的同学之间,也没有联系,
但是时间长了建立联系
可以通过导入坐标来建立联系,因为我的代码和jar包一样
比如我service层使用dao,直接导坐标

导入jar包依赖
导入到父工程的pom文件下,这样所有模块都可以使用
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<shiro.version>1.2.3</shiro.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
<spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>
<!-- 锁定jar包版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖jar包 -->
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
</dependencies>
<!-- 添加tomcat7插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
直接依赖和传递依赖
parent和dao就是直接依赖,默认的作用域就是compile


dao和junit是传递依赖,如果parent工程的pom文件中,junit依赖的坐标作用范围是test,那么从表中可以看出,此时传递依赖丢失,jar包坐标导入失败
我们的做法是再导入一次
最后的控制层导入

maven父子工程启动三种方式
1、直接启动父工程

2、从web模块启动

这时报错
找不到service依赖

原因是:虽然我在web模块的pom文件中已经添加了service依赖,但是在仓库中找不到,中央仓库和本地仓库都没有这个jar包

所以我们要对模块先进行install,安装到本地仓库
选择父工程,


这时再启动就正常了
3、使用本地tomcat
不使用maven的tomcat插件
配置tomcat


两种启动方式,打包部署和热部署
我们选择热部署

热部署
本篇文章主要是介绍Idea这款开发工具的热部署,而用Idea的人大多数都是用来开发java程序,当前流行的java程序主要有两种,第一种是传统的Web应用,依赖Tomcat这种web容器运行;第二种是Spring boot程序, 内嵌了运行环境。
在顶部找到程序运行操作栏, 点击Edit Configurations

点击你要配置的tomcat,点击deployment,点击”+“

然后选择你要部署的war包,热部署必须要选择带有exploded的war包

再切换回Server,按照下图标注配置

配置完后点击ok即可启动你的tomcat,然后改一下jsp、java文件实验热部署配置是否成功。
最后提示一下,Idea热部署并非绝对实时, 还是会有延时的,假如你手速快的话可能会出现改了并没有马上生效。所以此时不要怀疑热部署没有配置成功,稍微等一会你会看到开发工具左下角会有一个class reload的提示,出现这个提示才说明已经热部署完成了。

当然,debug模式下 如果你想马上生效的话,可以点击下图标标注的按钮,或者使用快捷键Ctrl + F10

本文介绍如何使用Maven实现工程的拆分与聚合,通过建立父工程和子模块,实现代码的复用与管理。详细讲解了DAO、Service、Controller模块的创建过程,以及如何通过POM文件统一管理依赖版本。
6326

被折叠的 条评论
为什么被折叠?



