当前位置 : 主页 > 编程语言 > 其它开发 >

JavaWEB04-Maven&Mybatis

来源:互联网 收集:自由互联 发布时间:2022-06-19
今日内容 `Maven` Maven `Maven`概念简介 Maven `Maven`安装配置 Maven `Maven`基本使用 Idea 集成 `Idea`集成`Maven` Maven `Maven`依赖管理 `Mybatis` 概念 快速入门 核心配置文件 1. Maven 概述1.1 概念 Apache M
今日内容
    • Maven
    • Maven
    • Maven
    • Idea集成
    • Maven
1. Maven概述 1.1 概念

Apache Maven是一个项目管理工具,有两个核心功能:依赖管理(jar包管理)、项目构建(操作维护项目);

上述两个功能的实现是通过一个POM(Project Object Model,项目对象模型)对象来实现,该对象对应的是一个pom.xml文件;

pom.xml是整个Maven项目中最核心最重要的文件。

1.2 作用
  • 统一项目结构:提供标准的、统一的项目结构
  • 依赖管理:方便快捷的管理项目依赖的资源(Jar包等),避免资源间的版本冲突
  • 项目构建:提供标准、跨平台的自动化项目构建方式(编译、运行、测试、打包、发布等)
1.3 目录结构
// java项目结构
/*
Java项目(模块)根目录
├── pom.xml					核心配置文件
└── src						源代码和测试代码目录
    ├── main					源代码目录
    │   ├── java		    		源代码Java文件目录
    │   └── resources				源代码配置文件目录
    └── test					测试代码目录
        ├── java					测试代码Java文件目录
        └── resources				测试代码配置文件目录
*/

// javaweb项目结构
/*
javaweb项目(模块)根目录
├── pom.xml					核心配置文件
└── src						源代码和测试代码目录
    ├── main					源代码目录
    │   ├── java		    		源代码Java文件目录
    │   ├── resources				源代码配置文件目录
    │   └── webapp					Web项目核心目录
    │       └── WEB-INF					Web项目安全目录(仅允许服务端访问)
    │           └── web.xml					Web项目核心配置文件
    └── test					测试代码目录
        ├── java					测试代码Java文件目录
        └── resources				测试代码配置文件目录
*/
1.4 相关概念:仓库

存储jar包的仓库

image-1608426858065

1.5 相关概念:坐标

可以让Maven通过坐标快速的定位到某个jar文件,获取并供我们使用。

站点https://mvnrepository.com/

快速就获取坐标:Bing搜索maven jar包名字

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
  • 概念

    Maven中坐标是资源(jar包)的唯一标识

    使用坐标可以定义项目或引入项目中需要的依赖

  • Maven坐标的主要组成

    groupId:组织ID。当前项目或jar包隶属的组织名称,通常是域名反写;

    artifactId:名称。当前项目/jar包名称,通常是模块名称;

    version:版本号。当前项目/jar包的版本号。

2 安装和配置 2.1 安装
  • 解压

    Maven是绿色免安装版本,解压可用。

    建议所有的开发软件都放在同一个目录(不能有中文、空格及其他特殊字符)

  • 配置Path

    Maven运行需要依赖Java环境,所以要确保已经配置了JAVA_HOME 环境变量

    配置MAVAEN_HOME,值为Maven安装的根目录

    配置path,引用到刚才的Maven根目录,值为:%MAVAEN_HOME%\bin

  • 检测是否成功

    重新打开命令行窗口,键入mvn -version,如果有非错误提示,说明成功。

2.2 配置

仓库的配置只需要修改一个配置文件即可:maven安装目录下面的主配置文件conf/settings.xml

  • 本地仓库

    解压仓库的压缩包到某个目录,然后在settings.xml中配置如下内容:

    解压我分享的仓库到下面配置的位置(本地仓库)中

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <!-- localRepository
         | The path to the local repository maven will use to store artifacts.
    	 | 指定本地电脑保存jar包的路径,也就是本地仓库的路径
         |
         | Default: ${user.home}/.m2/repository
         | 如未指定,默认使用 用户目录/.m2/repository,该位置一般是在C盘,不推荐使用。
    		重点是下面的内容
           -->
      <localRepository>D:\Develop\Repository\Maven_Repository</localRepository>
    

    注:

    • 配置好之后,在idea整合maven时,需要重新建立索引,才能让idea有提示。(仅限于先使用idea集成了maven,后解压更新了仓库的情况)。
  • 中央仓库镜像

    配置阿里云对中央仓库的镜像,下载速度快。

    注意放在被注释的mirrors下面,小心层级关系

    <mirrors>
        <!-- 私服的配置方式一:所有的项目默认连接私服获取jar包,连接失败之后再连aliyun -->
        <mirror>
            <!-- 本镜像的id,与这里配置的其他镜像id不一样即可 -->
            <id>nexus</id>
            <!--  central表示镜像的是中央仓库 -->
            <mirrorOf>*</mirrorOf>
            <!-- 镜像路径,固定不变 -->
            <url>http://192.168.21.200:8081/repository/maven-public/</url>
        </mirror>   
        <mirror>
            <!-- 本镜像的id,与这里配置的其他镜像id不一样即可 -->
            <id>alimaven</id>
            <!--  central表示镜像的是中央仓库 -->
            <mirrorOf>central</mirrorOf>
            <!-- 名称,可以省略 -->
            <name>aliyun maven</name>
            <!-- 镜像路径,固定不变 -->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>   
    </mirrors>
    
  • 私服的配置方式二:某个项目的pom.xml文件配置

    在每个/某个模块的pom.xml文件中配置如下内容,粘贴在标签下即可

  • <!-- 方式二:为当前模块配置私服,本内容复制到pom.xml的project标签下 -->
    <repositories>
        <repository>
            <!-- 依赖仓库id,不可重复。repositories可以配置多个仓库,如果ID重复后面配置会覆盖之前的配置 -->
            <id>dependencies_Repositories</id>
            <!-- 私服仓库地址,即nexus仓库组的地址 -->
            <url>http://192.168.21.200:8081/repository/maven-public/</url>
    
            <!-- 是否下载releases构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
    
            <!-- 是否下载snapshots构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <!-- 配置插件从私服下载 -->
    <pluginRepositories>
        <pluginRepository>
            <id>plugins_Repositories</id>
            <url>http://192.168.21.200:8081/repository/maven-public/</url>
            <!-- 是否下载release版本构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否下载snapshots版本构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
    
3. 常见命令&生命周期 3.1 准备工作

Maven项目中最重要的是文件是pom.xml文件,我们先使用编辑好了该文件。

学习Maven常见命令和生命周期,我们就先使用一个配置好了pom.xml文件的可用的Maven项目。

有关pom.xml文件的内容以及maven项目的创建,我们稍后学习。

项目见:今天课程代码文件夹《maven-project》

3.2 常见命令

在模块根目录打开命令行,键入如下命令实现相应的功能。

每个命令都依赖于一到多个插件,首次执行该命令时会先从远程仓库下载插件对应的jar包到本次仓库,再通过下载好的jar包实现相应的命令。

  • mvn clean:清理命令,删除该模块的target目录

  • mvn compile:编译命令,把src目录所有内容编译到同级的target目录中

  • mvn package:打包命令。目前打成jar包,存入target根目录。

  • mvn test:测试命令。自动执行项目中测试代码,并生成测试报告。

  • mvn install:安装命令。自动把打包好的jar包,并保存到本地仓库。

4.3 生命周期

maven生命周期

  1. 生命周期划分为三套

    clean:清理生命周期。

    default:默认生命周期。核心工作,包含编译、测试、打包、安装等

    site:站点生命周期。产生报告、发布站点等。

  2. 同一生命周期内,执行后面的命令时,会自动执行该命令前面的所有命令

  3. 上述生命周期都是常用的,不常用的有很多。

image-20220508091523285

4. Idea集成Maven 4.1 Idea集成Maven

image-20220506200842821

4.2 新建maven管理的java模块
  • 创建模块,选择Maven,点击Next

    image-20210726175049876
  • 填写模块名称,坐标信息,点击finish,创建完成

    image-20210726175109822

    创建好的项目目录结构如下:

    image-20210726175244826

  • 编写 HelloWorld,并运行

4.3 导入maven管理的模块

建议将模块复制到当前项目下,然后再导入,避免因为路径带来不必要的麻烦。

  • 选择右侧Maven面板,点击 + 号

    image-20210726182702336
  • 选中对应项目的pom.xml文件,双击即可

    image-20210726182648891
  • 如果没有Maven面板,选择

    View --> Appearance --> Tool Window Bars

    image-20210726182634466

可以通过下图所示进行命令的操作:

image-20210726182902961 4.4 配置 Maven-Helper 插件

为了方便直接在模块上右击,使用maven相关命令,可以安装Maven helper插件。

  • 选择 IDEA中 File --> Settings

    image-20210726192212026
  • 选择 Plugins

    image-20210726192224914
  • 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

    image-20210726192244567
  • 重启 IDEA

安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:

image-20210726192430371 5 依赖

依赖就是之前说的jar,也可以是一个自己写的项目

Maven两大功能之一,就是强大的依赖管理。只需要配置简单的坐标,就可以完成依赖的导入。

5.1 配置

pom.xml文件中,通过dependencies的子标签dependency

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

配置成功后,需要重新当前项目maven可以动将对应版本的jar包导入到当前项目中。

可以每次修改后手动导入

也可以开启自动导入,设置见

如果依赖上报红线,可以通过配置私服解决。如果配置私服无效,看4.3中第6点。

如果部分或全部依赖报红:

  1. 使用第二种方式配置私服,并重新打开项目
  2. 把所有报红的依赖坐标全部剪切掉,挨个贴回来
5.2 依赖范围

通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。

如下所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
  • Scope取值如下
依赖范围 编译classpath 测试classpath 运行classpath 例子 compile Y Y Y logback test - Y - Junit provided Y Y - servlet-api runtime - Y Y jdbc驱动 system Y Y - 存储在本地的jar包 import 引入DependencyManagement
  • compile :作用于编译环境、测试环境、运行环境。此为默认值,也是绝大多数依赖要配置的范围。
  • test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
  • provided :作用于编译环境、测试环境。运行环境无效。详见下面代码。
  • runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题

注意:

  • 如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。

只有下面三个依赖需要指定为provided

<!-- 
	下面三个scope需要配置provided
 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

<!-- 下面一个scope可以配置test -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- 其他不用配置,即使用默认值compile -->
6. Mybatis 6.1 前置知识 6.1.1 框架和工具类
  • 工具类
    • 对程序中一小段代码的封装。项目中大多数代码还是需要我们写。
  • 框架
    • 通俗理解框架
    • 可以看做一个半成品的软件/项目。使用框架开发项目,项目中半数以上代码就不需要 我们编写了。
    • 我们一般需要配置(大多数框架都是重配置轻编码的)+少量编码,就可完成项目中的需求。
    • 框架的目的 就是为了简化编码eg:Mybatis
      我们在学习完Mybatis之后,dao层会很简单。你只需要写一个dao接口,然后写一个SQL语句,dao层就已经写完了。
  • 学习步骤
    • 这个框架能干什么?
    • 导包+配置
    • 框架少量的API,少量编码
6.1.2 ORM
  • Object Relational Mapping 对象关系映射的思想

  • 对象 - Java中的对象 关系-关系型数据库中表的记录 映射 - 一对一关联起来

  • java项目中的每一个实体类,对应数据库中的一个
    java类中的属性,对应数据库表中的字段
    java类中的一个实体对象,对应一个数据表中的一条记录

  • 全自动ORM框架:hibernate

    通过操作实体对象,就可以完成对数据库表中记录的操作。复杂业务性能低下,不可定制,学习成本高。

  • 半自动的ORM框架:Mybatis,ibatis

    基于ORM,但是SQL语句需要我们自己编写。自己优化SQL,可定制性强,效率高。

6.1.3Mybatis&原生JDBC
  • 原生JDBC缺点

    硬编码

    操作繁琐

    大量重复模板代码

  • 原生jdbc

    • 注册驱动,设置连接参数
    • 获取连接
    • 获取执行对象
    • 设置SQL参数并执行SQL语句
    • 封装结果集并封装成实体对象
    • 释放资源
    • 相同的内容已经抽取到工具类中(上述删除线标识的步骤)

    • 模板化(步骤不变,部分步骤相同,上述加粗的内容)的操作,也是可以抽取封装的。

      但是相同的步骤中又有不同的地方,不同的地方如果也要实现解耦,需要通过配置来实现

  • Mybatis解决方案

    • 连接复用:使用数据库连接池初始化并管理连接
    • 解耦:将SQL语句和设置到SQL中的参数抽取到xml配置文件中
    • 自动封装:通过反射内省等技术,实现查询结果集字段实体属性自动映射并赋值
  • Mybatis框架抽取后的样子

    image-20220507001804184

6.1.4 Mybatis简介
  • 是一个数据持久层(DAO)框架,封装共性内容让使用者只关注SQL本身。结合了ORM思想,是一个ORM半自动的框架。
  • 使用Mybatis之后,我们只需要定义一个Dao层接口+存储SQL的配置文件Mybatis映射配置文件)+ Mybatis核心配置文件,就可以完成Dao层内容。
6.2 Mybatis快速入门 6.2.1 Mybatis快速入门步骤
  • 配置依赖

    • mybatisMySQL数据库驱动、单元测试Junit
    • 日志相关
  • 编写Mybatis核心配置文件:mybatis-config.xml

    • 连接数据库四要素
    • <mapper>标签中映射文件路径不是./ 建议复制,不要手敲
  • 编写POJO类和Dao层接口,初始化数据库表及数据

  • 编写映射配置文件:UserDao.xml,在映射文件中编写SQL语句

  • 测试

  • 小经验

    • 直接生成mybatis的两类xml文件
    • Mybatis映射配置文件和接口之间相互跳转

依赖坐标

<?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.itheima</groupId>
    <artifactId>web_day04_mybatis01_02_quickstart</artifactId>
    <version>1.0-SNAPSHOT</version>


    <properties>
        <!-- 明确编码为U8 -->
        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
        <!-- 明确maven使用jdk1.8编译该模块 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>


    <!-- 配置依赖 -->
    <dependencies>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <!-- mysql数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--<scope>test</scope>-->
        </dependency>

        <!-- druid可以不用,因为Mybatis内置有连接池 -->

        <!-- logback -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

    </dependencies>

    <!-- 为当前模块配置私服 -->
    <repositories>
    	<repository>
    		<!-- 依赖仓库id,不可重复。repositories可以配置多个仓库,如果ID重复后面配置会覆盖之前的配置 -->
    		<id>dependencies_Repositories</id>
    		<!-- 私服仓库地址,即nexus仓库组的地址 -->
    		<url>http://192.168.21.200:8081/repository/maven-public/</url>

    		<!-- 是否下载releases构件 -->
    		<releases>
    			<enabled>true</enabled>
    		</releases>

    		<!-- 是否下载snapshots构件 -->
    		<snapshots>
    			<enabled>true</enabled>
    		</snapshots>
    	</repository>
    </repositories>
    <!-- 配置插件从私服下载 -->
    <pluginRepositories>
        <pluginRepository>
            <id>plugins_Repositories</id>
            <url>http://192.168.21.200:8081/repository/maven-public/</url>
            <!-- 是否下载release版本构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否下载snapshots版本构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库连接四要素 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///web22_day04_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

    </environments>
    <!-- 加载映射配置文件,xxMapper,本质上就是之前学习的xxxDao -->
    <mappers>
        <mapper resource="com/cy/dao/UserDao.xml"/>
    </mappers>
</configuration>

映射配置文件

<?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">
<!--
    目前可以把这个映射配置文件当做是接口的实现类,但是有如下要求:
        1. 接口和映射配置文件要放在相同的包下,编译之后会放在一起
        2. 映射配置文件名需要和接口名一致
        3. namespace(命名空间)的值需要是接口的全限定类名
-->
<mapper namespace="com.cy.dao.UserDao">
    <!--public List<User> findAll();-->
    <!--
        在映射配置文件中,通过一个个的statement标签,”实现“接口的抽象方法
        select update delete insert标签都是statement标签

        标签的属性
            id,唯一标识,值为接口对应的方法名
            resultType,值为对应方法的返回值类型/返回集合的元素类型,需要写全类名
            parameterType,值为对应方法的参数类型,一般会省略
        标签体中书写SQL语句。
    -->
    <select id="findAll" resultType="com.cy.pojo.User" >
        select * from tb_user;
    </select>


</mapper>

实体类User.java

package com.cy.pojo;

/**
 * @Author Vsunks.v
 * @Blog blog.sunxiaowei.net
 * @Description: User实体类
 */
public class User {
    private Integer id;
    private String username;
    private String password;
    private Character gender;
    private String addr;

    public User(Integer id, String username, String password, Character gender, String addr) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.addr = addr;
    }

    public User() {
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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 Character getGender() {
        return gender;
    }

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

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }
}

接口UserDao.java

package com.cy.dao;

/**
 * @Author Vsunks.v
 * @Blog blog.sunxiaowei.net
 * @Description:
 */
public interface UserDao {
    // 查询所有
    public List<User> findAll();
}

测试类MybatisTest.ava

package com.cy;
/**
 * @Author Vsunks.v
 * @Blog blog.sunxiaowei.net
 * @Description:
 */
public class MybatisDemo {

    @Test
    public void test01() throws IOException {
        // 指定核心配置文件的位置和名称
        String resource = "mybatis-config.xml";

        // Mybatis提供的加载配置文件功能
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 读取配置文件,创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // JDK7新特性,try with resources
        /**
         * 在try的小括号中建立连接,不需要自己释放资源
         */

        // session  会话  理解成  数据库连接Connection
        try (SqlSession session = sqlSessionFactory.openSession()) {

            // ****************************************
            // 以上代码,基本上不需要我们写。因为Spring整合Mybatis之后会消失

            // 利用反射/动态代理,创建一个指定接口的子类对象
            UserDao userDao = session.getMapper(UserDao.class);

            // 使用子类对象调用实现好的findAll方法
            List<User> users = userDao.findAll();

            // 打印所有数据
            System.out.println(users);

            // 这里我们不需要自己手动释放资源,try...会帮我们做。
            //session.close();
        }
    }
}
X. Idea中使用Maven注意点 x.1 导入导出注意事项

导出:把模块文件夹复制出来就行,建议删除target

导入:把模块文件夹复制到当前项目文件夹下,然后使用idea的右侧maven窗口添加,添加时选择对应的pom.xml即可;批量添加,如需要按住Ctrl ,选择多个pom.xml文件即可。

x.2 依赖自动导入

当修改了当前模块的pom.xml后,项目需要重新导入才能是修改生效;这个时候如果没有开启自动导入,会在idea右下角弹出提示:

image-20210119152641417

此时可以选择import changes重新导入使本次修改生效;

也可以点击右侧Enable Auto-import开启自动导入,之后所有的修改都会自动重新导入以使其生效。

  • idea2019中设置

    image-20210726193909276
  • idea2018中设置

    image-20220506234756495

x.3 依赖或插件爆红

两种情况:

  1. 在教室,配置我的私服,然后重启idea
  2. 不在教室,保证自己网络OK的前提下,reimport存在爆红的模块。

如果在下载依赖报错后,才配置了私服,会造成不请求私服的情况。

解决方法:在pom.xml中使用第二种方式配置了私服后(见3.2中私服配置方式2),将当前project关闭,重新打开;重新打开后的项目会重新读取pom.xml文件,识别其中配置的私服。

如果还爆红,把所有报红的依赖坐标全部剪切掉,挨个贴回来

x.4 导入依赖卡finished
  • 问题描述

    如果在导入依赖时,长时间卡在finished,是因为idea为maven分配的内存不足,调大即可。问题如下图:

    image-20201218155356020

  • 解决办法

    setting ==> Buid ==> Build Tools ==> Maven ==> Importing ==> VM options for importer ,修改其值为

    表示为maven分配内存,最小1G,最大2G

    -Xms1024m -Xmx2048m
    

    image-20220506234756495

x.5 模块中文件夹失效
  • 问题描述

    模块中srcjavaresources文件夹编程灰色,失效。

  • 解决方式

    两种解决方式任选其一:

    1. 右击模块中对应的文件夹,选择 mark directory as

      Sources Root:源代码的Java目录

      Test Sources Root:测试代码的Java目录

      Resources Root:源代码的配置文件目录

      Test Resources Root:测试代码的配置文件目录

    2. 打开project structure,选中模块-->source,点击每个文件夹,逐个点击修改

x.6 乱码
  • 问题描述

    控制台乱码

  • 解决问题

    设置使用内置骨架和编码(避免控制台/页面乱码)

    配置位置:settings–>buildxxx–>Build Tools –> Maven –> Runner –> VM Options中配置如下内容:

    -DarchetypeCatalog=internal -Dfile.encoding=GBK
    

    或者

    -DarchetypeCatalog=internal -Dfile.encoding=utf-8
    
网友评论