十八、Maven使用(2)

第一章 继承

1 需求

​ a项目 需要mysql包

​ b项目 需要mysql包

​ c项目 需要mysql包

​ 都需要,所以需要配置三次

问题:

​ 重复的代码配置了三次, 次数 100万个项目, 配置100万次

解决:

​ 继承了, 拥有了父类的一切

子pom继承父pom文件
在这里插入图片描述

2 父pom文件

<?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.itheima</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dao</module>
        <module>service</module>
        <module>web</module>
    </modules>

    <!--单独定义版本号  方便维护-->
    <properties>
        <!--mysql数据库驱动的版本-->
        <mysql.version>5.1.46</mysql.version>
        <c3p0.version>0.9.1.2</c3p0.version>
        <dbUtils.version>1.6</dbUtils.version>
        <servlet.version>3.1.0</servlet.version>
        <beanUtils.version>1.8.0</beanUtils.version>
        <lombok.version>1.18.8</lombok.version>
    </properties>

    <!--
       父项目使用,子项目继承我的jar坐标
       删除src,不需要写代码
       指定父项目的打包方式 pom
    -->
    <packaging>pom</packaging>

    <dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${beanUtils.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>

        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>${dbUtils.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>


        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!--编译插件, jdk8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3 子pom文件(以dao层举例)

<?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">

    <!--
           配置的是,当前工程的父工程坐标
           dao子工程,继承父工程坐标
    -->
    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao</artifactId>


</project>

第二章 聚合工程

分模块开发:
在这里插入图片描述
web模块依赖service模块,service模块依赖dao模块

tips:
war包:打包成web项目
jar包:普通java项目

1 创建父工程

选择无骨架,无代码,只编写pom文件
在这里插入图片描述
在这里插入图片描述

1.1 删除src目录

因为这个项目的唯一作用是用来管理版本的, 所以删掉没有用的src目录

删除完成,如下图
在这里插入图片描述

1.2 修改pom.xml管理版本

见第一章继承里的父pom文件

2 子模块(dao、service、web)

2.1 dao层(不用骨架)

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

    <!--
           配置的是,当前工程的父工程坐标
           dao子工程,继承父工程坐标
    -->
    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao</artifactId>


</project>

2.2 service层(不用骨架)

与dao层类似,service层依赖dao层

<?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>parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service</artifactId>

    <dependencies>
        <!--
            定义依赖jar包,依赖dao层
            写dao层的坐标
        -->
        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

2.3 web层(使用骨架)

使用webapp骨架建立,pom中删除与父类冲突或冗余的包
web层依赖service层,添加service的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">
    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.itheima</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>

    <!--定义业务层的依赖 jar-->
    <dependencies>
        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


    <build>
        <!--使用Tomcat插件,定义在这里,只有web项目才能使用-->
    </build>
</project>

3 注意事项

启动tomcat报错
在这里插入图片描述
先install父类的,再dao、service、web
打成的war包地址在本地的repository仓库中
最后web的war包中包含dao、service的jar包,可以直接到Tomcat的webapp中替换root直接发布
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第三章 Maven常用命令

在这里插入图片描述

1 clean命令

在这里插入图片描述
在这里插入图片描述

2 compile命令

在这里插入图片描述

3 test命令

test下的junit
在这里插入图片描述

4 package命令

mvn package, 打包项目
对java项目
在这里插入图片描述

对web项目
在这里插入图片描述

5 install命令

mvn install, 打包后将其安装在本地仓库
在这里插入图片描述
在这里插入图片描述

第四章 面向接口编程

在这里插入图片描述
引入:dao层代码需要改动,那么service、web层代码都要变动
解决:使用Beanfactory来提供service的实现类,通过反射机制结合配置文件来创建service的实现类对象。这样只需要改动配置文件就行.

bean.properties

UserService=com.itheima.service.impl.UserServiceImpl
UserDao=com.itheima.dao.impl.UserDaoImpl
package com.itheima.utils;

import com.itheima.service.UserService;

import java.util.ResourceBundle;

public class BeanFactory {
    /**
     * 读取配置文件,创建实现类对象返回
     * 方法: 传递接口,根据接口名读取键值对
     * 创建出接口实现类对象
     *
     * 参数是一个接口的class对象
     *
     * UserService=com.itheima.service.impl.UserServiceImpl
     *
     * Class类方法: getSimpleName()获取class对象的简单名字
     *
     * UserService
     */
    public static <T> T getInstance(Class<T> clazz){
        T obj = null;
        try {
            //获取到接口名
            String simpleName = clazz.getSimpleName();
            //System.out.println(simpleName);

            ResourceBundle bundle = ResourceBundle.getBundle("bean");
            //接口名作为键
            String className = bundle.getString(simpleName);
            //反射创建对象
            obj =(T)  Class.forName(className).newInstance();
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return  obj;
    }
}
package com.itheima.web;

import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import com.itheima.service.impl.UserServiceImpl;
import com.itheima.utils.BeanFactory;

public class Servlet {

    public void doGet(){
        /**
         * web层获取业务层接口实现类,不能new
         * 通过工具类 BeanFactor获取
         * 传递业务层的接口
         */
        UserService userService = BeanFactory.getInstance(UserService.class);
        userService.register();

        UserDao userDao = BeanFactory.getInstance(UserDao.class);
        userDao.register();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值