maven02_maven工程拆分聚合、启动的三种方式、热部署

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

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
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值