目 录CONTENT

文章目录

不可不会的项目管理工具——Maven进阶(2)

Eric
2022-02-01 / 0 评论 / 0 点赞 / 199 阅读 / 8,270 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 分模块开发和设计

1.1 项目目录结构

分模块开发和设计的目录结构.png

1.2 相关模块及代码

1.2.1 maven-ssm

  • 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>top.open1024</groupId>
    <artifactId>maven-ssm</artifactId>
    <version>1.0</version>
    <!-- 定义该工程用于进行构建管理 -->
    <packaging>pom</packaging>

    <!-- 管理的工程列表 -->
    <modules>
        <!-- 具体的工程名称 -->
        <module>maven-ssm-pojo</module>
        <module>maven-ssm-dao</module>
        <module>maven-ssm-service</module>
        <module>maven-ssm-web</module>
    </modules>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <!-- 声明此处进行依赖管理 -->
    <dependencyManagement>
        <!-- 具体的依赖 -->
        <dependencies>
            <!-- 自定义工程依赖 -->
            <dependency>
                <groupId>top.open1024</groupId>
                <artifactId>maven-ssm-service</artifactId>
                <version>1.0</version>
            </dependency>
            <dependency>
                <groupId>top.open1024</groupId>
                <artifactId>maven-ssm-pojo</artifactId>
                <version>1.0</version>
            </dependency>
            <dependency>
                <groupId>top.open1024</groupId>
                <artifactId>maven-ssm-dao</artifactId>
                <version>1.0</version>
            </dependency>
            <!-- spring的环境 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!-- Spring整合Junit -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!-- mybatis的环境 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.3</version>
            </dependency>
            <!--mysql环境-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.25</version>
            </dependency>
            <!--spring整合jdbc-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!--spring整合mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.3</version>
            </dependency>
            <!--druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.16</version>
            </dependency>
            <!--分页插件坐标-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--
        可以在子工程中定义依赖关系,无需声明依赖版本,版本将参考父工程中依赖的版本。
        当然,我直接定义在父工程了。
    -->
    <dependencies>
        <!-- spring的环境 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <!-- Spring整合Junit -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <!-- mybatis的环境 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>
        <!--mysql环境-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--spring整合jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <!--spring整合mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!--分页插件坐标-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <!--具体的插件配置-->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <port>80</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

1.2.2 maven-ssm-pojo

  • 目录结构:

maven-ssm-pojo的目录结构.png

  • 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-ssm</artifactId>
        <groupId>top.open1024</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-pojo</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

</project>
  • top.open1024.domain.User.java
package top.open1024.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * User
 *
 * @author open1024
 * @version 1.0
 * @since 2021 -06-14 07:25
 */
public class User implements Serializable {

    private String uuid;

    private String username;

    private String password;

    private String realName;

    private Integer gender;

    private Date birthday;


    public String getUuid() {
        return uuid;
    }


    public void setUuid(String uuid) {
        this.uuid = uuid;
    }


    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 String getRealName() {
        return realName;
    }


    public void setRealName(String realName) {
        this.realName = realName;
    }


    public Integer getGender() {
        return gender;
    }


    public void setGender(Integer gender) {
        this.gender = gender;
    }


    public Date getBirthday() {
        return birthday;
    }


    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "uuid='" + uuid + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", realName='" + realName + '\'' +
                ", gender=" + gender +
                ", birthday=" + birthday +
                '}';
    }
}

1.2.3 maven-ssm-dao

  • 目录结构:

maven-ssm-dao的目录结构.png

  • 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-ssm</artifactId>
        <groupId>top.open1024</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-dao</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 导入资源文件pojo -->
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-pojo</artifactId>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
  • top.open1024.mapper.UserMapper.java
package top.open1024.mapper;

import top.open1024.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 08:40
 */
@Mapper
public interface UserMapper {

    /**
     * 添加用户信息
     *
     * @param user 用户信息对象
     * @return 如果新增成功,则返回true;否则,返回false
     */
    boolean save( User user);

    /**
     * 修改用户信息
     *
     * @param user 用户信息对象
     * @return 如果修改成功,则返回true;否则,返回false
     */
    boolean update( User user);

    /**
     * 删除用户信息
     *
     * @param uuid 主键
     * @return 如果删除成功,则返回true;否则,返回false
     */
    boolean delete(String uuid);

    /**
     * 根据主键查询用户信息
     *
     * @param uuid 主键
     * @return 用户信息
     */
    User get(String uuid);

    /**
     * 查询全部用户信息
     *
     * @return 全部用户信息
     */
    List<User> getAll();

    /**
     * 根据用户名和密码查询用户信息
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    User getByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

}
  • com/xudaxian/mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.open1024.mapper.UserMapper">
    <insert id="save">
        INSERT INTO `user` (uuid, username, password, realName, gender, birthday)
        VALUES (#{uuid}, #{username}, #{password}, #{realName}, #{gender}, #{birthday})
    </insert>
    <update id="update">
        UPDATE `user`
        SET username=#{username},
            password=#{password},
            realName=#{realName},
            gender=#{gender},
            birthday=#{birthday}
        WHERE uuid = #{uuid}
    </update>
    <delete id="delete">
        DELETE
        FROM `user`
        WHERE uuid = #{uuid}
    </delete>
    <select id="get" resultType="top.open1024.domain.User">
        SELECT *
        FROM `user`
        WHERE uuid = #{uuid}
    </select>
    <select id="getAll" resultType="top.open1024.domain.User">
        SELECT *
        FROM `user`
    </select>
    <select id="getByUsernameAndPassword" resultType="top.open1024.domain.User">
        SELECT *
        FROM `user`
        WHERE username = #{username}
          AND password = #{password}
    </select>
</mapper>
  • jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
jdbc.username=root
jdbc.password=123456
  • applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启bean注解扫描-->
    <context:component-scan base-package="top.open1024">
        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

    <!--加载properties文件-->
    <context:property-placeholder location="classpath*:jdbc.properties"/>

    <!--数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--整合mybatis到spring中-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="top.open1024.mapper"/>
        <!--分页插件-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                            <prop key="helperDialect">mysql</prop>
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

    <!--映射扫描-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="top.open1024.mapper"/>
    </bean>

</beans>

1.2.4 maven-ssm-service

  • 目录结构:

maven-ssm-service的目录结构.png

  • 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-ssm</artifactId>
        <groupId>top.open1024</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-service</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-dao</artifactId>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
  • top.open1024.service.UserService.java
package top.open1024.service;

import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 10:47
 */
public interface UserService {

    /**
     * 保存用户信息
     *
     * @param user 用户信息
     * @return
     */
    boolean save(User user);

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return
     */
    boolean update(User user);

    /**
     * 删除用户信息
     *
     * @param uuid 主键
     * @return
     */
    boolean delete(String uuid);

    /**
     * 根据主键获取用户信息
     *
     * @param uuid 主键
     * @return
     */
    User get(String uuid);

    /**
     * 分页显示用户信息
     *
     * @param page 页码
     * @param size 每页显示条数
     * @return
     */
    PageInfo<User> getAll(int page, int size);

    /**
     * 根据用户名和密码登录
     *
     * @param userName
     * @param password
     * @return
     */
    User login(String userName, String password);
}
  • top.open1024.service.impl.UserServiceImpl.java
package top.open1024.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;
import top.open1024.mapper.UserMapper;
import top.open1024.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 10:48
 */
@Transactional
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public boolean save(User user) {
        return userMapper.save(user);
    }

    @Override
    public boolean update(User user) {
        return userMapper.update(user);
    }

    @Override
    public boolean delete(String uuid) {
        return userMapper.delete(uuid);
    }

    @Override
    public User get(String uuid) {
        return userMapper.get(uuid);
    }

    @Override
    public PageInfo<User> getAll(int page, int size) {
        PageHelper.startPage(page, size);
        List<User> userList = userMapper.getAll();
        return new PageInfo<>(userList);
    }

    @Override
    public User login(String userName, String password) {
        return userMapper.getByUsernameAndPassword(userName, password);
    }
}
  • applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--开启bean注解扫描-->
    <context:component-scan base-package="top.open1024">
        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

    <!-- 导入applicationContext-dao.xml文件   -->
    <import resource="classpath*:applicationContext-dao.xml"/>

    <!--开启注解式事务-->
    <tx:annotation-driven transaction-manager="txManager"/>

    <!--事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

1.2.5 maven-ssm-web

  • 目录结构:

maven-ssm-web的目录结构.png

  • 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-ssm</artifactId>
        <groupId>top.open1024</groupId>
        <version>1.0</version>
        <!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-ssm-web</artifactId>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-service</artifactId>
        </dependency>
    </dependencies>

    <build>
        <!--设置插件-->
        <plugins>
            <!--具体的插件配置-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • top.open1024.utils.Code.java
package top.open1024.utils;

import java.io.Serializable;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 12:42
 */
public class Code implements Serializable {
    //    操作结果编码
    public static final Integer SAVE_OK = 20011;
    public static final Integer UPDATE_OK = 20021;
    public static final Integer DELETE_OK = 20031;
    public static final Integer GET_OK = 20041;

    public static final Integer SAVE_ERROR = 20010;
    public static final Integer UPDATE_ERROR = 20020;
    public static final Integer DELETE_ERROR = 20030;
    public static final Integer GET_ERROR = 20040;

    //    系统错误编码

    //    操作权限编码

    //    校验结果编码

}
  • top.open1024.utils.Result.java
package top.open1024.utils;

import java.io.Serializable;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 12:42
 */
public class Result implements Serializable {
    //    操作结果编码
    private Integer code;
    //    操作数据结果
    private Object data;
    //    消息
    private String message;

    public Result(Integer code) {
        this.code = code;
    }

    public Result(Integer code, Object data) {
        this.code = code;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", data=" + data +
                ", message='" + message + '\'' +
                '}';
    }
}
  • top.open1024.web.UserController.java
package top.open1024.web;

import com.github.pagehelper.PageInfo;
import top.open1024.domain.User;
import top.open1024.service.UserService;
import top.open1024.utils.Code;
import top.open1024.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-06-14 12:40
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public Result save(User user) {
        boolean flag = userService.save(user);
        return new Result(flag ? Code.SAVE_OK : Code.SAVE_ERROR);
    }

    @PutMapping
    public Result update(User user) {
        boolean flag = userService.update(user);
        return new Result(flag ? Code.UPDATE_OK : Code.UPDATE_ERROR);
    }

    @DeleteMapping("/{uuid}")
    public Result delete(@PathVariable String uuid) {
        boolean flag = userService.delete(uuid);
        return new Result(flag ? Code.DELETE_OK : Code.DELETE_ERROR);
    }

    @GetMapping("/{uuid}")
    public Result get(@PathVariable String uuid) {
        User user = userService.get(uuid);
        return new Result(null != user ? Code.GET_OK : Code.GET_ERROR, user);
    }

    @GetMapping("/{page}/{size}")
    public Result getAll(@PathVariable Integer page, @PathVariable Integer size) {
        PageInfo<User> all = userService.getAll(page, size);
        return new Result(null != all ? Code.GET_OK : Code.GET_ERROR, all);
    }

    @PostMapping("/login")
    public Result login(String userName, String password) {
        User user = userService.login(userName, password);
        return new Result(null != user ? Code.GET_OK : Code.GET_ERROR, user);
    }

}
  • applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="top.open1024">
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

    <import resource="classpath*:applicationContext-service.xml"/>

</beans>
  • spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven/>

    <context:component-scan base-package="top.open1024.web">
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>

</beans>
  • webapp/WEB-INF/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_3_1.xsd"
         version="3.1">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>

    <!--启动服务器时,通过监听器加载spring运行环境-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2 聚合和继承

2.1 聚合

  • 聚合的作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。

  • 制作方式:

    • ①创建项目,打包类型定义为pom。
<!-- 定义该工程用于进行构建管理 -->
<packaging>pom</packaging>
    • ②定义当前项目进行构建操作时关联的其他模块名称:
<!-- 管理的工程列表 -->
<modules>
    <!-- 具体的工程名称 -->
    <module>maven-ssm-pojo</module>
    <module>maven-ssm-dao</module>
    <module>maven-ssm-service</module>
    <module>maven-ssm-web</module>
</modules>

注意事项:参与聚合操作的模块最终执行顺序和模块间的依赖关系有关,和配置顺序无关。

2.2 继承

  • 继承的作用:通过继承可以实现在子工程中沿用父工程的配置。

  • 制作方式:

    • ①在父工程中定义依赖管理。
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
    <!-- 具体的依赖 -->
    <dependencies>
        <!-- 自定义工程依赖 -->
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-service</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-pojo</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>top.open1024</groupId>
            <artifactId>maven-ssm-dao</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- spring的环境 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- Spring整合Junit -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- mybatis的环境 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!--mysql环境-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <!--spring整合jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!--spring整合mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.3</version>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <!--分页插件坐标-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>
    • ②在子工程中声明其父工程坐标和对应的位置。
<!-- 定义该工程的父工程 -->
<parent>
    <artifactId>maven-ssm</artifactId>
    <groupId>top.open1024</groupId>
    <version>1.0</version>
    <!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
    <relativePath>../pom.xml</relativePath>
</parent>
  • 继承的资源:

    • groupId:项目组ID,项目坐标的核心因素。

    • version:项目版本,项目坐标的核心因素。

    • description:项目的描述信息。

    • organization:项目的组织信息。

    • inceptionYear:项目的创始年份。

    • url:项目的URL地址。

    • developers:项目的开发者信息。

    • contributors:项目的贡献者信息。

    • distributionManagement:项目的部署配置。

    • issueManagement:项目的缺陷跟踪系统信息。

    • CIManagement:项目的持续集成系统信息。

    • scm:项目的版本控制系统。

    • malilingLists:项目的邮件列表信息。

    • properties:自定义的Maven属性。

    • dependencies:项目的依赖配置。

    • dependencyManagement:项目的依赖管理配置。

    • repositories:项目的仓库配置。

    • build:包括项目的源码目录配置i、输出目录配置、插件配置、插件管理配置等。

    • reporting:包括项目的报告输出目录配置、报告插件配置等。

2.3 聚合和继承的异同点

  • 作用:

    • 聚合用于快速构建项目。

    • 继承用于快速配置。

  • 相同点:

    • 聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。

    • 聚合和继承均属于设计型模块,并无实际的模块内容。

  • 不同点:

    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些。

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己。

3 属性

3.1 自定义属性

  • 作用:等同于定义变量,方便统一维护。

  • 定义格式:

 <!-- 定义自定义属性 -->
<properties>
    <spring.vresion>5.1.9.RELEASE</spring.vresion>
    <mybatis.version>3.5.3</mybatis.version>
</properties>
  • 调用格式:
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
    <!-- 具体的依赖 -->
    <dependencies>
        <!-- spring的环境 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.vresion}</version>
        </dependency>
        <!-- mybatis的环境 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

3.2 内置属性

  • 作用:使用maven内置属性,快速配置。

  • 调用格式:

${basedir}
${version}

3.3 Settings属性

  • 作用:使用maven配置文件settings.xml中的标签属性,用于动态配置。

  • 调用格式:

${settings.localRepository}

3.4 Java系统属性

  • 作用:读取Java系统属性。

  • 调用格式:

${user.home}
  • 系统属性查询方式:
mvn help:system

3.5 环境变量属性

  • 作用:使用maven配置文件settings.xml中的标签属性,用于动态配置。

  • 调用格式:

${env.JAVA_HOME}
  • 环境变量属性查询方式:
mvn help:system

4 版本管理

4.1 工程版本

  • SNAPSHOT(快照版本):

    • 项目开发过程中,为方便团队成员合作,解决模块间依赖和即时更新的问题,开发者对于每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)。

    • 快照版本会随着开发的进展不断的更新。

  • RELEASE(发布版本):

    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。

4.2 工程版本号的约定

  • 约定规范:

    • <主版本>.<次版本>.<增量版本>.<里程碑版本>

    • 主版本:表示项目重大架构的变更,如:Spring5相较于Spring4的迭代。

    • 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞。

    • 增量版本:表示有重大漏洞的修复。

    • 里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相对,相对来说不是很稳定,有待更多的测试。

  • 范例:5.1.9.RELEASE

5 资源配置

  • 资源配置中的资源包括properties文件、applicationContext.xml文件等。

  • 资源配置其实就是将propertiesapplicationContext.xml等文件中的信息配置到Maven中,由Maven统一管理,这样就可以在任意文件中加载pom文件中定义的属性了。

  • 示例:

  • jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
  • pom.xml
<!-- 定义自定义属性 -->
<properties>
    <jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <!--具体的插件配置-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <!-- 配置资源文件对应的信息 -->
    <resources>
        <resource>
            <!-- 设定配置文件对应的位置目录,支持使用属性动态设置路径 -->
            <directory>${project.basedir}/src/main/resources</directory>
            <!-- 开启对配置文件的资源加载过滤 -->
            <filtering>true</filtering>
        </resource>
    </resources>
    <!-- 配置测试资源文件对应的信息 -->
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>
</build>

6 多环境开发配置

6.1 多环境开发

多环境兼容.png

6.2 多环境配置

  • pom.xml
<!-- 创建多环境 -->
<profiles>
    <!-- 定义具体的环境:开发环境 -->
    <profile>
        <!-- 定义环境对应的唯一id -->
        <id>dev_env</id>
        <!-- 定义环境中专用的属性值 -->
        <properties>
            <jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
        </properties>
        <!-- 设置默认启动 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 定义具体的环境:测试环境 -->
    <profile>
        <id>test_env</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.0.0.1:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
        </properties>
    </profile>
</profiles>

6.3 加载指定环境

  • 作用:加载指定环境配置。

  • 命令:

mvn 指令 -P 环境定义id
  • 示例:
mvn install -P test_env

7 跳过测试

7.1 跳过测试环境的应用场景

  • 整体模块功能未开发。

  • 模块中某个功能未开发完毕。

  • 单个功能更新调试导致其他功能失败。

  • 快速打包。

  • ……

7.2 跳过测试

7.2.1 使用命令跳过测试

  • 命令:
mvn 指令 -D skipTests

注意事项:执行的指令生命周期必须包含测试环节。

  • 示例:
mvn install -D skipTests

7.2.2 IDEA中使用界面跳过测试

IDEA中使用界面跳过测试.png

7.2.3 使用配置跳过测试

  • pom.xml
<build>
    <!-- 使用配置跳过测试 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <!-- 开启跳过测试 -->
                <skipTests>true</skipTests>
                <!-- 包含指定的测试用例 -->
                <includes>
                    <include>**/User*Test.java</include>
                </includes>
                <!-- 排除指定的测试用例 -->
                <excludes>
                    <exclude>**/User*TestCase.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

8 私服

8.1 Nexus

  • Nexus是Sonatype公司的一款Maven私服产品。

  • 下载地址

8.2 Nexus的安装、启动和配置

  • 解压即可使用(系统为win10)。

Nexus的安装.png

  • 启动服务器:
cd nexus-3.30.1-01
nexus.exe /run nexus
  • 访问服务器(默认端口为8081):

  • http://localhost:8081

  • 修改基础配置信息:安装路径下的etc目录中的nexus-default.properties文件保存有nexus基础配置信息,例如:默认访问端口。

  • 修改服务器运行配置信息:安装路径下bin目录中的nexus.vmoptions文件保存有nexus服务器启动的配置信息,例如:默认占用内存空间。

8.3 私服资源获取

私服资源获取.png

8.4 仓库的分类

  • 宿主仓库hosted:保存无法从中央仓库获取的资源。

    • 自主研发。

    • 第三方非开源项目。

  • 代理仓库proxy:代理远程仓库,通过nexus访问其它公共仓库,例如:中央仓库。

  • 仓库组group:

    • 将若干个仓库组成一个群组,简化配置。

    • 仓库组不能保存资源,属于设计型仓库。

8.5 登录Nexus

登录Nexus1.png

登录Nexus2.png

登录Nexus3.png

登录Nexus4.png

登录Nexus5.png

登录Nexus6.png

8.5 创建仓库

创建仓库1.png

创建仓库2.png

创建仓库3.png

创建仓库4.png

8.6 将创建的仓库放入到maven-public仓库组中

将创建的仓库放入到maven-public仓库组中1.png

将创建的仓库放入到maven-public仓库组中2.png

将创建的仓库放入到maven-public仓库组中3.png

8.7 手动上传组件

手动上传组件1.png

手动上传组件2.png

手动上传组件3.png

手动上传组件4.png

8.8 IDEA环境中资源上传和下载

8.8.1 概述

IDEA环境中资源上传和下载概述.png

8.8.2 本地仓库访问私服

  • 配置本地仓库访问私服的权限(settings.xml)
<servers>
    <!-- 配置访问服务器的权限 -->
    <server>
        <id>xudaxian-snapshots</id>
        <username>admin</username>
        <password>123456</password>
    </server>
    <server>
        <id>xudaxian-release</id>
        <username>admin</username>
        <password>123456</password>
    </server>
</servers>
  • 配置本地仓库资源来源(settings.xml)
<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <mirrorOf>central</mirrorOf>
        <url>
            http://maven.aliyun.com/nexus/content/groups/public/
        </url>
    </mirror>
    <!-- 配置本地仓库资源来源 -->
    <mirror>
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <name>本地私服</name>
        <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

8.8.3 IDEA访问私服和组件上传

  • 配置当前项目访问私服上传资源的保存位置(pom.xml)
<!-- 发布配置管理   -->
<distributionManagement>
    <snapshotRepository>
        <id>xudaxian-snapshots</id>
        <url>http://localhost:8081/repository/xudaxian-snapshots/</url>
    </snapshotRepository>
    <repository>
        <id>xudaxian-release</id>
        <url>http://localhost:8081/repository/xudaxian-release/</url>
    </repository>
</distributionManagement>
  • 发布资源到私服的命令:
mvn deploy
0

评论区