不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Java基础

  • 面向对象

  • Java进阶

  • Web基础

    • 01.Maven
      • 01.Maven
        • 1、Maven简介
        • 2、项目结构
        • 3、pom.xml
        • 4、Maven安装
        • 5、更换远程仓库
      • 02.依赖管理
        • 1、初始化项目
        • 2、IDEA打开
        • 3、添加依赖
        • 4、下载依赖
        • 5、使用依赖
        • 6、运行测试
      • 03.IDEA使用maven
        • 1、IDEA创建Maven项目
        • 2、IDEA配置Maven
        • 3、IDEA配置Maven-Helper
        • 4、依赖管理
      • 04.依赖传递
    • 02.JDBC
    • 03.IDEA集成Tomcat
    • 04.Servlet入门
  • Spring框架

  • 微服务

  • Java
  • Web基础
xiaonaiqiang
2024-05-30
目录

01.Maven

# 01.Maven

# 1、Maven简介

  • 提供了一套标准化的项目结构

  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

  • 提供了一套依赖管理机制

  • 构建管理

    • Maven可以用于构建和管理项目,如Java、C#等
    • Maven使用一个标准方式来构建项目,包括编译源代码、运行测试、打包二进制文件、生成文档等
  • 依赖管理

    • Maven有一个中央仓库,用于管理JAR文件、依赖和文档
    • Maven项目的POM文件描述了项目的依赖关系,Maven会自动下载所有依赖文件并将它们放在正确的位置
  • 项目信息管理

    • Maven可以管理项目的信息,如开发者、版本、邮件列表、依赖关系、变更日志等。这些信息可以在POM文件中进行管理
  • 构建过程管理

    • Maven使用标准的或者自定义的插件参与构建的各个阶段,能够进行项目信息报告、依赖关系分析、单元测试报告等

# 2、项目结构

  • 一个使用Maven管理的普通的Java项目,它的目录结构默认如下
  • 所有的目录结构都是约定好的标准结构,我们千万不要随意修改目录结构
  • 使用标准结构不需要做任何配置,Maven就可以正常使用
a-maven-project  // 项目名
├── pom.xml      // 项目描述文件
├── src          
│   ├── main
│   │   ├── java       // 存放Java源码的目录
│   │   └── resources  // 存放资源文件的目录
│   └── test
│       ├── java       // 存放测试源码的目录
│       └── resources  // 存放测试资源的目录
└── target  // 所有编译、打包生成的文件都放在target目录里
1
2
3
4
5
6
7
8
9
10

# 3、pom.xml

  • 一个Maven工程就是由groupId,artifactId和version作为唯一标识

    • groupId类似于Java的包名,通常是公司或组织名称

    • artifactId类似于Java的类名,通常是项目名称

    • 再加上version

  • 我们在引用其他第三方库的时候,也是通过这3个变量确定

  • 使用<dependency>声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中

<project ...>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.itranswarp.learnjava</groupId>
	<artifactId>hello</artifactId>
	<version>1.0</version>
	<packaging>jar</packaging>
	<properties>
        ...
	</properties>
  
	<dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
	</dependencies>
  
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 4、Maven安装

  • Mac安装
brew install maven
mvn -version
1
2

# 5、更换远程仓库

  • 在xml文件中,我们要关注两个地方,我在下面列了出来 localRepository 和 mirrors
  • 第一个localRepository是你本地仓库所在的位置,你的包都会下载到这里
    • 默认在你用户目录的.m2目录下,挺直观的,就没修改了
  • 第二个mirror是你的包下载地址
    • 因为有墙,所以建议增加阿里云仓库配置,来加速下载
    • 具体配置如下,可以自己在xml中寻找,然后使用下面文件替换即可
# vi /usr/local/Cellar/maven/3.9.7/libexec/conf/settings.xml
1
<mirrors>
  
  <mirror>
    <id>maven-default-http-blocker</id>
    <mirrorOf>external:http:*</mirrorOf>
    <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
    <url>http://0.0.0.0/</url>
    <blocked>true</blocked>
  </mirror>
  <mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>

</mirrors>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 02.依赖管理

compile :编译

clean:清理

test:测试

package:打包

install:安装

  • 如果我们的项目依赖第三方的jar包,我们需要手动下载zip包,解压到classpath路径下
  • Maven解决了依赖管理问题
    • 例如,我们的项目依赖abc这个jar包,而abc又依赖xyz这个jar包
    • 当我们声明了abc的依赖时,Maven自动把abc和xyz都加入了我们的项目依赖

# 1、初始化项目

  • 首先,我们使用Maven的archetype:generate命令初始化一个项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
1
  • 这个命令会创建一个名为my-app的项目,项目的目录结构如下
my-app  // 项目名
├── pom.xml      // 项目描述文件
└── src
    ├── main
    │   └── java      // 存放Java源码的目录
    │       └── com
    │           └── example
    │               └── App.java
    └── test
        └── java       // 存放测试源码的目录
            └── com
                └── example
                    └── AppTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2、IDEA打开

  • IntelliJ IDEA会自动加载项目,并解析pom.xml文件,下载项目所需的依赖
  • 如果你的项目使用的Java版本和IDEA默认的Java版本不一致,你可能需要手动设置项目的SDK
  • 点击"File",然后选择"Project Structure",在弹出的窗口中选择"Project",然后在右侧的"Project SDK"下拉菜单中选择合适的Java版本
  • 还可以在"File" -> "Settings" -> "Build, Execution, Deployment" -> "Build Tools" -> "Maven"中配置Maven的相关设置
    • 如Maven home directory(Maven的安装路径
    • User settings file(用户配置文件的路径,通常是~/.m2/settings.xml)
    • Local repository(本地仓库的路径,通常是~/.m2/repository)

# 3、添加依赖

  • 我们需要在pom.xml文件中添加依赖项
    • junit:用来做单元测试
    • jackson-databind:用来做Json序列化
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.0</version>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4、下载依赖

  • Maven会自动下载项目所需的所有依赖
  • 在项目上右键,然后选择"Maven -> Reload project"
mvn clean install
1

# 5、使用依赖

  • src/test/java/com/example/AppTest.java
import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {
    @Test
    public void testApp() {
        assertTrue(true);
    }
}
1
2
3
4
5
6
7
8
9
  • src/main/java/com/example/Main.java
package com.example;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        // 使用mapper对象进行JSON序列化或反序列化
    }
}
1
2
3
4
5
6
7
8
9
10

# 6、运行测试

  • Maven会自动运行项目中的所有测试,包括我们刚才添加的测试
mvn test
1

# 03.IDEA使用maven

# 1、IDEA创建Maven项目

# 2、IDEA配置Maven

  • 在idea等工具中配置路径时:在打开的路径弹窗中,直接按快捷键command+shift+G,输入需要的路径
# mvn -version
Maven home: /usr/local/Cellar/maven/3.9.7/libexec

/usr/local/Cellar/maven/3.9.7/libexec/conf/settings.xml
1
2
3
4
  • 配置Maven自动更新
  • 让上面maven配置新建项目时生效(然后重复上面步骤即可)

# 3、IDEA配置Maven-Helper

  • 快速解决依赖冲突了

# 4、依赖管理

  • 添加依赖
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
1
2
3
4
5
  • src/main/java/com/example/Main.java
package com.example;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        // 使用mapper对象进行JSON序列化或反序列化
    }
}
1
2
3
4
5
6
7
8
9
10

# 04.依赖传递

  • scope是一个元素,它用来限制依赖的传递性,同时也影响了依赖的classpath
  • compile:

    • 这是默认的scope,如果没有指定一个scope,那么就会被设置为compile
    • 这意味着该依赖项在所有的classpath中都可用,并且它们都会被打包
  • provided:

    • 这意味着你需要在JDK或者容器中提供这个依赖
    • 例如,当开发一个web应用的时候,Servlet API是由web容器提供的,所以你不需要在你的应用中包含Servlet API
    • 在编译和测试的时候,这个classpath会被提供出来,但是在运行的时候,就不会了
  • runtime:

    • 这个scope表示在编译主代码时,不需要这个依赖,但是在运行和测试代码的时候,需要这个依赖
  • test:

    • 这个scope表示这个依赖只有在测试的时候才需要,它不会被打包进产品中。
  • system:

    • 这个scope和provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径
    • 这个scope通常是不推荐使用的,因为它会使得构建的可移植性变得很差
  • import:

    • 这个scope只用在dependencyManagement中,表示从指定的POM中导入dependency配置
    • 该依赖项在实际使用中的scope会被从这个POM中导入的依赖的scope覆盖
  • tomcat-servlet-api的scope为provided,这意味着它将在编译和测试时可用
  • 但在运行时,它应该由Tomcat容器提供,因此不会被打包到最终的构建中
<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>9.0.22</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
上次更新: 2024/5/31 11:18:42
10.设计模式
02.JDBC

← 10.设计模式 02.JDBC→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式