一 , 什么是 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 确定的类型
来源: http://www.bubuko.com/infodetail-3157135.html