Maven进阶

本文深入探讨了Maven的高级用法,包括Tomcat插件的配置与调试,依赖范围的详细解释,传递依赖的管理,排除依赖的方法,以及Maven生命周期的理解。此外,还介绍了统一版本管理和聚合与继承的概念,帮助开发者更好地掌握Maven的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven进阶

一、使用Tomcat关于maven的插件

在pom.xml添加一个插件的配置:

<build>
    <plugins>
      <!--Tomcat7插件-->
      <plugin>
         <groupId>org.apache.tomcat.maven</groupId>
         <artifactId>tomcat7-maven-plugin</artifactId>
         <version>2.2</version>
        <configuration>
          <!--指定义访问项目时的上下文根路径-->
          <path>/maven-demo02-web</path>
          <!--访问tomcat的端口-->
          <port>8080</port>
          <!--针对get方式请求字符集编码-->
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

依赖和插件的区别:

  • 添加依赖: 默认会随着项目打包时以及运行时一起添加

    |-注意,可通过scope来改变依赖的范围
    
  • 添加插件: 仅在开发项目时添加,打包部署时,插件的jar文件不会一起添加

补充:maven项目使用tomat7插件运行时,如何调试:

(1)调试: debug 解决程序中的错误 .

(2)调试的步骤:

  • 猜测试程序出错的大致的地方
  • 设置断点 breakpoint
  • 单步运行
  • 观察程序执行时变量的变化
  • 找出代码问题
  • 停止debug模式
  • 更正代码

(3) 配置Idea,启用debug

image-20210426114013134

二、Maven进阶

1.依赖范围

当我们在pom中添加依赖时,指定scope,用来表示此依赖jar的存在时间范围(使用时期).

  • 编译时期 A
  • 测试时期 B
  • 运行时期 C
  • 打包时期 D

scope [6个值]

|-compile [编译] 此依赖范围值,是scope的默认值,也是最强依赖 [A,B,C,D]

|- provided 提供 表示由第三方容器来提供, [A,B 需要] 在 [C,D]运行和打包时期 不需要加载

​ 代表: servlet-api,jsp-api

|- runtime 运行时 表示所依赖的jar文件,仅在运行时和测试时加载 [C,B]

                  代表:   jdbc.jar -- java.sql.*  Connection,Statement,ResultSet,PrepareStatement接口

|- test 仅在测试时需要加载,

​ 需要注意的是,如果某个包的作用域是test,那么只能在src/test目录下使用jar的相关类,其他任何地方访问无效

​ 代表: junit


不 推 荐:

system 、import


2.传递依赖

对比Eclipse与 Idea 对于项目与模块区分

Eclipse ---> Workspace  ----相当于Idea  -->Project 

Eclipse --> Project   ----相当于 Idea 中的Module [模块]

比如: A -> B -> C

A 添加对B项目的依赖 ,则 C项目也被传递依赖到A项目中.

  • 传递Jar时原则:

​ 使用jar包时,按照就近原则,路径最近的原则进行使用.

  • 如果路径是一样的,则以pom.xml中的dependency配置的先后顺序为准

3.排除依赖

如果对于传递依赖的某个jar包,不想要使用加载至当前项目中,则可以排除此依赖.

<dependencies>
    <dependency>
        <groupId>com.woniu</groupId>
        <artifactId>module-a</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </exclusion>
            <exclusion>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

4.maven生命周期 [了解]

  • Maven生命周期主要分为三个大的阶段 [clean , default - 【编译,测试,打包,安装,部署】, site]
  • 每个阶段都是相关的插件程序来完成的
  • clean --validate [验证]-- compile 【src/main/java/目录代码进行编译】-- test 【src/test/java/编译并执行@Test方法】 – package【jar,war,pom】 – verify[校验]-- install - deploy【安装到远程仓库】 – site

小结:maven的生命周期包含多个阶段,每个阶段由对应的插件去完成对应的动作;其中后面的插件执行会先执行之前的生命周期

5.统一版本管理

  • 解决版本之前的兼容问题
  • 对于多模块的父子项目中,统一版本的管理,更快捷方便更新版本号
<properties>
        <mysql.jdbc.version>8.0.19</mysql.jdbc.version>
        <druid.version>1.2.4</druid.version>
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>

6.maven聚合与继承

(1)**引言:**在实际的项目中,如果项目比较大的情况下,会把项目的功能分成很多个模块(module),模块与模块之间使用RPC(远程调用),而聚合和继承就特别适合

(2) 什么是聚合与继承

  • 聚合与继承是两个概念,但是它们通常一起出现
  • 聚合 -就是将多个项目模块进行统一管理[统一编译,测试,打包,安装,部署]
    • 聚合模块知道被聚合模块,被聚合不知道聚合模块
    <modules>
        <module>module-a</module>
        <module>module-b</module>
    </modules>
  • 继承 - 将父项目中配置的依赖与插件信息供子项目继承,简化子项目的配置,及统一版本管理

    • 子模块必须知道父模块,父模块不知道子模块的存在

      父模块中一定有:
      <packaging>pom</packaging>
      
image-20210426154219905
 <parent>
        <artifactId>parent</artifactId>
        <groupId>com.woniu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

补充:配置插件,对于src/main/java目录下的资源文件不过滤:

 <build>
        <plugins>
            <!--资源文件拷贝插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugins</artifactId>
                <version>2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <!--配置maven对resources文件过滤-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <!--false表示不过滤java目录下的xml,properties文件-->
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

依赖和插件的区别:

  • 依赖:在运行时需要的jar包,打包是会添加
  • 插件:仅在项目开发时需要用到,运行时不需要,打包不会被添加

三、MyBatis注解开发(了解)

1.基本CRUD注解

使用相对较多

@Insert,

​ |-@Options

@Options(useGeneratedKeys=true,keyColumn="id",keyProperty="id")
获取自动生成的主键id

@Select,@Update,@Delete

结果集映射 ResultMap

@Results

{@Result(id=true,column="",property="")}
/**
 * 用户 Dao的接口
 */
public interface UserDao {
    // public User getById(int id);

    @Select("select id,userCode,userName,userPassword,gender,birthday from smbms_user where roleid=#{roleid}")
    @ResultMap(value="userResultMap")  //引用已经定义的results
    public List<User> getUsersByRoleId(int roleid);

    @Select("select id,userCode,userName,userPassword,gender,birthday from smbms_user")
    @Results(id="userResultMap",value={
        @Result(id=true,column = "id",property = "id"),
            //ctrl+d 复制当前行
        @Result(column = "userCode",property = "userCode"),
        @Result(column = "userName",property = "user_name"),
        @Result(column = "userPassword",property = "userPassword"),
        @Result(column = "gender",property = "gender"),
        @Result(column = "birthday",property = "birthday")
    })
    public List<User> getUserList();

     @Insert("insert into smbms_user(userCode,userName,userPassword,gender,birthday,roleid) " +
             "values(#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{roleid})")
     //ctrl+p
     @Options(useGeneratedKeys=true,keyColumn="id",keyProperty="id")
     public void add(User user);
    //
    // public void update(User user);
    //
    // public void deleteById(int id);
}

2.关联查询注解

mapper.xml

一对多 @Many

多对一,一对一 @One

import com.woniu.entity.Role;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

public interface RoleDao {

    @Select("select id,roleCode,roleName from smbms_role")
    @Results(id="roleResultMap",value={
            @Result(id = true,column = "id",property = "id"),
            @Result(column="roleCode",property = "roleCode"),
            @Result(column="roleName",property = "roleName"),
            @Result(column="id",property = "userList",
                    many=@Many(select="com.woniu.dao.UserDao.getUsersByRoleId",
                            fetchType= FetchType.LAZY))
        }
    )
    public List<Role> getRoleList();
}

3.动态SQL注解

(略),查看教学文档了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值