一 、什么是 maven 子父级工程?

建立一个maven项目,然后在该项目 下创建一个module,子级的maven,他继承于父级项目。

 

1.新建立 maven项目,file  ------new----project----maven,不使用它的模板。直接选择 ----next

java maven父子项目中文乱码 maven父子项目的作用_数据库

完成,将父级工程的src 干掉?

父级工程的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.aaa</groupId>
    <artifactId>DemoSpringBoot</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!--modules 模块标签
      1.  所有的父级工程  作用是管理jar包  不参与任何逻辑算法。所以可以干掉 SRC
      2.  列举了父工程中的所有子模块,子工程可以自动继承父级工程中的jar包  
      3.  每一个子模块都代表了不同的包(package)
    -->
    <modules>
        <module>mapper</module>
        <module>model</module>
        <module>service</module>
        <module>web</module>
    </modules>

    <dependencies>
        <!-- 在父级工程中,添加一些jar 包。
               mysql的驱动包
           -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.21</version>
        </dependency>
        <!--
            spring
        -->
        <!--
            mybatis
        -->
        <!--
            shiro
        -->

    </dependencies>


</project>



 

2.在父级工程下,右键点节,建立子级module  。

java maven父子项目中文乱码 maven父子项目的作用_java_02

 

 根据需求,建立一些其他的子级工程。

java maven父子项目中文乱码 maven父子项目的作用_java_03

 

 二、<dependencyManagement>标签。

思考?子级工程自动继承父级工程的jar包,可是,根据需要,有些子级工程不需要继承父级的jar包,但是依旧继承了,怎么处理?

 

2.1解决方案。父级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.aaa</groupId>
    <artifactId>DemoSpringBoot</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mapper</module>
        <module>model</module>
        <module>service</module>
        <module>web</module>
    </modules>

    <!-- 思考问题?
        model项目中用不到shiro,但是父子工程的规则也需要把shiro的jar加载进来,影响项目的进度和运行速度,如何解决?

    <denpencyManagement>标签作用

    1.    被<denpencyManagement>所控制的jar包,不会被子工程所继承,如果子工程有需要,可以重写父工程中的jar包,并且不需要携带版本号
    2.    如果不省略版本号,则jar包会从maven中进行下载,并不再是从父工程中重写的jar包

   优点?
        1.方便jar包管理,父子工程。
        2.解决jar包冗余问题。层级依赖。
    -->
    <dependencyManagement>
        <dependencies>
            <!--
                mysql的驱动包
            -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
                <version>1.9.21</version>
            </dependency>

        </dependencies>
    </dependencyManagement>



</project>



 

2.2 子级想要继承。以mapper为列。

 



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

    <artifactId>mapper</artifactId>

    <!--
      1.  子工程如果需要,重写父级工程的jar包即可,但是不能 携带版本号

      2.将父级工程中的jar包 直接复制过来,但是不可携带版本号。
    -->

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>


</project>



 

三、实体类的定义规则



package com.aaa.entity;
import java.io.Serializable;
/*
*  *      从今天开始,所有的实体类必须按照以下标准
 *          1.需要实现序列化接口
 *          2.需要重写hashCode和equalse
 *          3.需要重写toString()
 *          4.必须有getter和setter方法
 *          5.要求所有的类型全部为包装类型,不能使用基本类型
 *
 *
 *         注意:  2.需要重写hashCode和equalse 
*
* */

public class User implements Serializable {
    private Long id;
    private String username;
    private String password;
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object object) {
        if (this == object) return true;
        if (object == null || getClass() != object.getClass()) return false;

        User user = (User) object;

        if (id != null ? !id.equals(user.id) : user.id != null) return false;
        if (username != null ? !username.equals(user.username) : user.username != null) return false;
        if (password != null ? !password.equals(user.password) : user.password != null) return false;
        return age != null ? age.equals(user.age) : user.age == null;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (username != null ? username.hashCode() : 0);
        result = 31 * result + (password != null ? password.hashCode() : 0);
        result = 31 * result + (age != null ? age.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}



 

 

注意:  2.需要重写hashCode和equalse  确定的类型

java maven父子项目中文乱码 maven父子项目的作用_java maven父子项目中文乱码_04