maven項目 子父級工程。


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

建立一個maven項目,然后在該項目 下創建一個module,子級的maven,他繼承於父級項目。

 

1.新建立 maven項目,file  ------new----project----maven,不使用它的模板。直接選擇 ----next

完成,將父級工程的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  。

 

 根據需求,建立一些其他的子級工程。

 

 二、<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  確定的類型

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM