筱团Blog筱团のBlog

Maven

筱团·2021-10-14 02:13·224 次阅读

Maven

Apache Maven 的作用#

Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个 POM(Project Object Module 项目对象模型),中间画框部分即 Maven:

Maven 文件一览#

bin 文件夹

maven 的所有可运行指令,里面的 mvn 是核心文件,

boot 文件夹

一般 boot 翻译为启动,里面的 plexus-classworlds-2.6.0.jar 文件是类管理器

conf 文件夹

配置文件夹,里面的 logging 是日志,settings.xml 是核心文件

lib 文件夹

包含 maven 运行所依赖的 jar 包

LICENSE 文件

协议

NOTICE 文件

注意事项

README.txt 文件

Apache Maven 的相关说明

Maven 基础知识#

一、Maven 的坐标

作用:用于描述仓库中资源的位置

描述:由 groupld、artifactld、version 组成

groupld:定义当前 maven 项目隶属组织名称(通常是域名反写,如:com.xiaotuan)

artifactld:定义当前 maven 项目名称(通常是模块名称,如:CRM、SMS)

version:定义当前项目版本号

packaging:定义改项目的打包方式

Copy
举例:写入 maven 中的代码 <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>

二、去中央仓库找 jar 包

网站:mvnrepository.com

三、常用 mvn 命令

Copy
编译 mvn compile 清除 mvn clear 测试 mvn test 打包 mvn target 安装到本地仓库 mvn install

Maven 项目一览#

Maven-JAVA / Maven-WEB 项目一览:

PS:一般一个工程一个 pom.xml,但如果分模块的话,每个模块则单独有一个!

IDEA 操作一览#

新建 Maven-JAVA / Maven-WEB 项目

文件 > 项目结构 > 模块 > ➕ > 新建模块 > Maven > 从原型创建[√] > maven-archetype-quick / maven-archetype-webapp > 如下:

父项 None
位置 空文件夹
Groupld com.xiaotuan
Artifactld 通常与名称一致
archetypeCatalog internal

然后直接点击确定,让 maven 自主运行一段时间,再返回 项目结构 继续配置:

最后项目结构如图所示:

可以在代码右侧进行 maven 的操作:

tomcat 启动 web 工程#

在官方网站:https://mvnrepository.com 下载 tomact 插件

这里我们选择比较旧的稳定版 Apache Tomcat Maven Plugin :: Tomcat 7.x » 2.1

在添加配置中添加 maven 运行命令 tomcat7:run,名称为:启动服务器

然后点击运行,我们就可以访问本地 web 服务器(localhost)啦~

这里附上我 web 工程的 pom.xml 文件:

Copy
<?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"> <!-- 指定 pom 的模型版本 --> <modelVersion>4.0.0</modelVersion> <!-- 组织ID --> <groupId>com.xiaotuan</groupId> <!-- 项目ID --> <artifactId>TEST_WEB</artifactId> <!-- 版本号:完成版 release, 开发版 snapshot --> <version>1.0-SNAPSHOT</version> <!-- 打包方式:web 工程打包为 war, java 工程打包为 jar --> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <!-- 设置当前工程的所有依赖 --> <dependencies> <!-- 具体的依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> <!-- 构建 --> <build> <!-- 设置插件 --> <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> </build> </project>

依赖管理#

依赖传递

直接依赖:相差 1 度的为直接依赖

间接依赖:相差 2 度或以上的为间接依赖

依赖冲突

路径优先:度数小的覆盖度数大的(如图所示)

声明优先:同层配置,前面的覆盖后面的

Copy
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- 下面的依赖中包含上面的依赖 --> <dependency> <groupId>com.xiaotuan</groupId> <artifactId>TEST_WEB</artifactId> <version>1.0-SNAPSHOT</version> </dependency>

特殊优先:同级配置,后面的覆盖前面的

Copy
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>

可选依赖

添加一个标签 optional,并设置为 true

效果:别人用你的依赖时,optional 为 true 的依赖被隐藏,别人无法使用

Copy
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <optional>true</optional> </dependency>

排除依赖

添加一个标签 exclusions,并在其中添加所要排除的依赖 exclusion

效果:你不想用别人的某个依赖,在 exclusions 中添加 不想用的依赖 exclusion 即可

Copy
<dependency> <groupId>com.xiaotuan</groupId> <artifactId>TEST_WEB</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <groupld>log4j</groupld> <artifactld>log4j</artifactld> </exclusion> </exclusions> </dependency>

依赖范围

添加一个标签 scope,并设置为依赖的范围

效果:仅在依赖的范围中,依赖才生效

Copy
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>

依赖范围的传递性,如图所示:

项目构建生命周期#

一般分为三套:

  1. clean:清理工作

  2. default:核心工作,例如编译,测试,打包,部署等

  3. site:产生报告,发布站点等

clean

default

site

插件

插件与生命周期内的阶段是绑定的,所需插件也可在官网查看:https://maven.apache.org/plugins/index.html

Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的

下面以 source 插件为例,作用是:执行到生命周期中的 generate-test-resources 时,生成 jar 包(生成名称:TEST_JAVA-1.0-SNAPSHOT-sources.jar)

Copy
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <goals> <goal>jar</goal> </goals> <phase>generate-test-resources</phase> </execution> </executions> </plugin> </plugins> </build>

Maven 高级用法#

我参考的视频为黑马程序员,但我懒得再学下去了,等需要了再学吧~

posted @   筱团  阅读(224)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
目录