maven创建父子依赖项目
- maven创建父子依赖项目:
- 参考思路:
- 思维图:
- 三种项目示例:
- jar:控制台项目:
- war:web项目:
- war:web项目:(待写)
- 案例:横向拆分(按照项目结构进行拆分)
- 创建项目:
- 创建父级项目:
- 父级项目的功能/功能:
- 补充:项目目录下的<font color="red">idea进行隐藏:
- 创建子级项目:
- 补:三层结构:
- 创建dao子级项目:
- 创建service子级项目:(和创建dao子级项目相同)
- 创建web子级项目:(和创建dao子级项目不同)
- 父级项目和自己项目之间的联系:
- <font color="red">所有的jar包依赖必须在父级项目中pox.xml中引用!
- 在父级项目下pom.xml引入需要的jar包依赖:
- 效果/问题/解决展示:
- 父级统一管理jar包依赖:
- 引用父级jar包依赖:
- 子级dao进行引用父级的jar包依赖:
- 子级web进行引用父级的jar包依赖:
- 引用兄弟项目:
- 子级dao在pom.xml中引用兄弟的项目:
- 子级web在pom.xml中引用兄弟项目:
- 修改子级web项目下web.xml版本配置:
- 修改子级web项目下pom.xml编译版本:
- 配置tomcatb:
- 运行结果:
- 项目代码整体结构:
- 代码:
- 父级pom.xml:
- 子级dao:
- dao:
- StudentDAOImpl:
- util:
- BaseDAO:
- pom.xml:
- 子级service:
- StudentServletImpl:
- pom.xml:
- 子级web:
- web.xml:
- pom.xml:
- pom.xml:
单体项目:目前的项目都是单体项目,一个项目的结构。
父子依赖项目:可以嵌套很多层的项目结构,(父亲-儿子-孙子-重孙子…|项目套项目|大项目套小项目|等)是必须要会的!后期用springcloud开发就要用父子依赖结构的项目。
maven创建父子依赖项目:
参考思路:
引用兄弟项目:
思维图:
两种拆分项目的方式:横向拆分(按照项目结构拆分)、纵向拆分(按照业务模块拆分)
三种项目示例:
jar:控制台项目:
war:web项目:
war:web项目:(待写)
案例:横向拆分(按照项目结构进行拆分)
创建项目:
创建父级项目:
首先创建maven父类项目(这里的父级项目为普通的jar项目,具体要根据需要而定!)
父级项目的功能/功能:
父级项目是用来用来组织子级项目。 不需要写代码。将项目目录下的src直接删掉!
补充:项目目录下的idea进行隐藏:
创建子级项目:
补:三层结构:
dao被sevrice依赖,sevrice被web依赖。
三层结构,可分为三个子级项目,分别是dao、servlet、web。
创建dao子级项目:
创建service子级项目:(和创建dao子级项目相同)
创建web子级项目:(和创建dao子级项目不同)
父级项目和自己项目之间的联系:
父级的pom.xml:
dao子级的pom.xml:
service子级的pom.xml:
web子级的pom.xml:
所有的jar包依赖必须在父级项目中pox.xml中引用!
①问题/解决:子级的jar包依赖要保持一致,统一交给父级进行引入(dependency/ies),便于管理。
②问题/解决:父级引用依赖之后,所有子级继承父级所有的jar包依赖。但是有些子级根本就不需要某些jar包依赖。这时需要将所有子级的jar包依赖统一由父级进行引入和管理(dependencyManagement)【不做实际引用,只做管理】,子级根据需要从父级那里进行引入。
在父级项目下pom.xml引入需要的jar包依赖:
pom.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yzh7</groupId>
<artifactId>maven_0811_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<properties>
<webVersion>3.1</webVersion>
<servlet-version>4.0.1</servlet-version>
<jsp-version>2.2</jsp-version>
<jstl-version>1.2</jstl-version>
<spring-version>4.1.6.RELEASE</spring-version>
<commons-dbcp-version>1.4</commons-dbcp-version>
<aspectjweaver-version>1.8.6</aspectjweaver-version>
<mybatis-version>3.4.6</mybatis-version>
<mybatis-spring-version>1.3.3</mybatis-spring-version>
<log4j-version>1.2.9</log4j-version>
<mysql-connector-java-version>8.0.11</mysql-connector-java-version>
<jackson-version>2.5.0</jackson-version>
<commons-fileupload-version>1.3.1</commons-fileupload-version>
</properties>
<dependencies>
<!-- 添加javaEE支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- dbcp连接池 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commons-dbcp-version}</version>
</dependency>
<!-- jackson json支持包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<!-- mysql驱动类 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java-version}</version>
</dependency>
</dependencies>
</project>
效果/问题/解决展示:
父级统一管理jar包依赖:
点击刷新父级pom.xml文件及右侧工具栏。可以看出所有的子级继承了父级的jar包依赖!
为了避免有些子级引用父类中不需要的jar包依赖。jar包依赖由父类进行统一的引入和管理(dependencyManagement),由子级根据需要从父类那里引用!
引用父级jar包依赖:
修改后的pom.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yzh7</groupId>
<artifactId>maven_0811_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<properties>
<webVersion>3.1</webVersion>
<servlet-version>4.0.1</servlet-version>
<jsp-version>2.2</jsp-version>
<jstl-version>1.2</jstl-version>
<spring-version>4.1.6.RELEASE</spring-version>
<commons-dbcp-version>1.4</commons-dbcp-version>
<aspectjweaver-version>1.8.6</aspectjweaver-version>
<mybatis-version>3.4.6</mybatis-version>
<mybatis-spring-version>1.3.3</mybatis-spring-version>
<log4j-version>1.2.9</log4j-version>
<mysql-connector-java-version>8.0.11</mysql-connector-java-version>
<jackson-version>2.5.0</jackson-version>
<commons-fileupload-version>1.3.1</commons-fileupload-version>
</properties>
<!-- dependencyManagement 依赖管理-->
<dependencyManagement>
<dependencies>
<!-- 添加javaEE支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- dbcp连接池 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commons-dbcp-version}</version>
</dependency>
<!-- jackson json支持包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<!-- mysql驱动类 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后进行刷新pom.xml:(可以看到父级子级都没有了dependencies)
子级dao进行引用父级的jar包依赖:
补充:子级也可从父级引用jar包依赖,版本号由子级自己定义:
子级的版本号与父级不同。
编写代码:
子级web进行引用父级的jar包依赖:
引用兄弟项目:
子级dao在pom.xml中引用兄弟的项目:
刷新自己的pom.xml:
引用即可:
子级web在pom.xml中引用兄弟项目:
修改子级web项目下web.xml版本配置:
修改子级web项目下pom.xml编译版本:
配置tomcatb:
运行结果:
项目代码整体结构:
代码:
父级pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yzh7</groupId>
<artifactId>maven_0811_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<properties>
<webVersion>3.1</webVersion>
<servlet-version>4.0.1</servlet-version>
<jsp-version>2.2</jsp-version>
<jstl-version>1.2</jstl-version>
<spring-version>4.1.6.RELEASE</spring-version>
<commons-dbcp-version>1.4</commons-dbcp-version>
<aspectjweaver-version>1.8.6</aspectjweaver-version>
<mybatis-version>3.4.6</mybatis-version>
<mybatis-spring-version>1.3.3</mybatis-spring-version>
<log4j-version>1.2.9</log4j-version>
<mysql-connector-java-version>8.0.11</mysql-connector-java-version>
<jackson-version>2.5.0</jackson-version>
<commons-fileupload-version>1.3.1</commons-fileupload-version>
</properties>
<!-- dependencyManagement 依赖管理-->
<dependencyManagement>
<dependencies>
<!-- 添加javaEE支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- dbcp连接池 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commons-dbcp-version}</version>
</dependency>
<!-- jackson json支持包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<!-- mysql驱动类 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子级dao:
dao:
StudentDAOImpl:
package com.dao;
import com.util.BaseDAO;
import java.util.List;
import java.util.Map;
public class StudentDAOImpl {
//不标准的代码步骤
public List<Map<String,Object>> listAll(){
return BaseDAO.executeQuery("select * from studentInfo",null);
}
}
util:
BaseDAO:
package com.util;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BaseDAO {
//四大金刚
//驱动类
private static final String DRIVER="com.mysql.cj.jdbc.Driver";
//连接地址
private static final String URL="jdbc:mysql://localhost:3306/70806_db?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
//用户名
private static final String USER="root";
//密码
private static final String PASSWORD="123456";
//获取连接
public static Connection getConnection(){
Connection con = null;
try{
//加载驱动类
Class.forName(DRIVER);
//获取连接
con = DriverManager.getConnection(URL,USER,PASSWORD);
}catch(Exception ex){
ex.printStackTrace();
}
return con;
}
//关闭数据库对象
public static void closeAll(Connection con,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
if(st!=null){
try{
st.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
if(con!=null){
try{
con.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
//通用设置参数方法
public static void setParams(PreparedStatement pst,Object[] params){
if(params==null){
return;
}
for(int i=0;i<params.length;i++){
try{
pst.setObject(i+1,params[i]);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
//通用增删改
public static int executeUpdate(String sql,Object[] params){
Connection con = null;
PreparedStatement pst = null;
int res = -1;
try{
//获取连接
con = getConnection();
//创建预编译命令执行对象
pst = con.prepareStatement(sql);
//设置参数
setParams(pst,params);
//执行
res = pst.executeUpdate();
}catch(Exception ex){
ex.printStackTrace();
}finally{
closeAll(con,pst,null);
}
return res;
}
//通用查询
public static List<Map<String,Object>> executeQuery(String sql,Object[] params) {
List<Map<String,Object>> rows = new ArrayList<>();
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
try{
//获取连接
con = getConnection();
//获取命令对象
pst = con.prepareStatement(sql);
//设置参数
setParams(pst,params);
//执行查询
rs = pst.executeQuery();
//通过rs获取结果集的结构信息
ResultSetMetaData rsmd = rs.getMetaData();
//获取结果集的列数
int colCount = rsmd.getColumnCount();
//遍历查询结果,并封装到List<Map>中
while(rs.next()){
//用Map存储当前行的各个列数据
Map<String,Object> map = new HashMap<>();
//循环获取每一列的信息
for(int i=1;i<=colCount;i++){
//获取列名(使用rsmd)
String colName = rsmd.getColumnLabel(i);
//获取列值(使用rs)
Object colVal = rs.getObject(i);
//将当前列存储到map中
map.put(colName,colVal);
}
//将遍历的当前行的数据存储到List中
rows.add(map);
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
closeAll(con,pst,rs);
}
return rows;
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>maven_0811_parent</artifactId>
<groupId>com.yzh7</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dao</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!-- 引用父级的jar包依赖 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
子级service:
StudentServletImpl:
package com.service;
import com.dao.StudentDAOImpl;
import java.util.List;
import java.util.Map;
public class StudentServletImpl {
//private StudentDAOImpl
public List<Map<String,Object>> listAll(){
return new StudentDAOImpl().listAll();
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>maven_0811_parent</artifactId>
<groupId>com.yzh7</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!-- 引用兄弟项目 -->
<dependencies>
<dependency>
<groupId>com.yzh7</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
子级web:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
pom.xml:
<%@ page import="com.service.StudentServletImpl" %><%--
Created by IntelliJ IDEA.
User: 33154
Date: 2022/8/14
Time: 19:34
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.print(new StudentServletImpl().listAll());
%>
</body>
</html>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>maven_0811_parent</artifactId>
<groupId>com.yzh7</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>web</artifactId>
<packaging>war</packaging>
<name>web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<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>
</properties>
<dependencies>
<!-- 添加javaEE支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<!-- provided只在编译时支持,发布时不拷贝文件 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- 引用兄弟项目 -->
<dependency>
<groupId>com.yzh7</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<finalName>web</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>