0609 maven

maven项目管理工具入门到精通

1. 课程安排

maven入门

概念

配置

maven进阶-配置详解

搭建私服(第三方仓库)

2. maven入门

2.1. 为什么产生maven管理工具

 

jar: 依赖

使用maven管理软件的依赖(jar),避免团队反复的复制(jar)

maven管理工具具有依赖传递性,使用maven管理工具可以自动导入相关的依赖进行开发.

2.2. 什么是maven

Maven项目对象模型(POM),可以通过一小段描述信息[配置信息]来管理项目的构建,报告和文档的项目管理工具软件。

主要的功能:

方便项目的发布(项目是有生命周期管理的)-->项目从没有到有的一个过程.

在众多的依赖进行管理(项目中的依赖共享) --> 自已与别人的关系

 

总结:

一. 每个项目都有一个对象模型(Project Object Model):POM (一个maven项目必须有一个配置文件pom.xml文件)

二. 有一个标准的集合(在项目中进行一系列的配置)

三. 它是一个生命周期管理工具

清理/编译/测试/报告/打包/部署

四. 有一个管理系统,只需要配置一下即可使用,前提必须按照maven的规则办事.

使用maven的前提条件:需要联网,maven的项目中,是没有任何依赖的,在使用到依赖时,会从互联网下载到本地进行使用.

3. maven的下载与安装

下载地址:http://maven.apache.org/download.cgi

 

在课件中已提供下载好的安装包:

 

安装maven,需要在jdk的运环下运行,需要安装好jdk,才能安装.

环境变量必须配置在jdk之后

 

 

 

查看配置是否生效:

 

 

4. maven的本地仓库

开发工具在运行项目时会用到一些依赖,这些依赖按照一定的规则存在本地计算机下的一个目录路径下,这个目录称为maven的本地仓库.

maven的本地仓库配置:

 

 

默认的目录路径: 本机用户的home目录下/.m2/repository目录.

可以更改目录路径:(本地仓库)

<localRepository>D:/path/to/local/repo</localRepository>

5. maven项目类型

普通的java项目:   jar

普通的web项目:  war包

maven本身项目:  pom

5.1. 手动创建maven普通java项目(了解)

 

 

java项目的目录结构:

--src : 代码的目录

--src/main: 源代码目录(包括java代码和配置)

--src/main/java : 代表java的码代码

--src/test : 测试代码目录

--src/test/java : java的测试代码

--pom.xml -->每个模目都有一个核心的配置文件pom

5.2. 手动创建mavenweb项目(了解)

mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.hotdas.maven.quickstart -DartifactId=simple1 -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0.0-snapshot

 

区分目录结构:

 

 

6. maven项目构建相关命令

(后面的命令运行,必须会运行前面的命令)

编译: mvn compile 将项目变成字节码文件

测试: mvn test 将项目中的test变成字节码文件

清除: mvn clean 将编译后的文件清除掉

打包: mvn package 将项目进行打包

运行项目: mvn run 运行当前项目

项目发布: mvn intall 将本地项目安装到仓库

项目部署: mvn deploy 将本地项目部署到生产环境

 

7. maven项目编辑工具的转换

7.1. 转化为eclipse项目

mvn eclipse:eclipse maven项目转化为eclipse项目

mvn eclipse:clean maveneclipse配置清除掉

7.2. 转化为idea项目

mvn idea:ideamaven项目转化为idea项目

mvn idea:clean maven的idea配置清除掉

 

8. settings.xml配置文件

localRepository : 配置本地仓库目录

interactiveMode: 是否需要获取用户输入的模式

offline : 是否要离线模式下运行maven

pluginGroups: 插件组,在默认的情况下maven使用到的插件

proxies : 通过代理访问外面的仓库

servers : 配置服务器的配置  例如:安全配置待

mirrors: 镜像库 默认使用全球最大的中央仓库

profiles: 配置多种参数

profile: 配置单个参数

activeProfiles: 让多个配置生效

activeProfile: 让单个配置生效

 

9. idea集成maven环境

 

 

10. 使用idea创建项目

 

 

 

packaging:代表打包方式: pom,jar,war

10.1. 配置tomcat运行web项目

<?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.hotdas</groupId>
    <artifactId>demo2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging<!--代表当前项目是一个web项目-->

<dependencies>

</dependencies>
    
<!-- 配置Tomcat插件 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
                <!-- 指定端口 -->
                <port>8080</port>
                <!-- 请求路径 -->
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

 

运行项目配置:

 

运行效果:

 

 

11. maven进阶-配置详解

11.1. maven仓库

maven,仓库分为: 本地仓库/远程仓库(最大的是中央仓库)

远程仓库: 自定义仓库(第三方仓库/私服)  / 中央仓库

 

11.1.1. 依赖下载流程(没有配置私服)

 

11.1.2. 依赖下载流程(配置私服)

 

 

11.1.3. 第三方仓库

在默认的情况下,maven是从中央仓库下载依赖,当配置私服时,优先从私服下载依赖.

nexus: 第三方仓库   完全免费

 

 

artifactory : 第三方仓库  收费的

 

 

11.2. 坐标

坐标: 是区分全球所有项目的.

groupId : 组织 --用于区分公司全球项目的,一般是域名倒写
artifactId : 项目标识 -- 用于区公司内容的项目
version : 版本号  --标注项目使用版本的

 

获取坐标方式: 从中央仓库获取

 

11.3. 聚合模块与继承

模块: 就是工程拆分的部分

使用:

<modules>
    <module>logs</module>
</modules>

 

父项目(继承):

<parent>
    <artifactId>demo2</artifactId>
    <groupId>com.hotdas</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

 

11.4. 依赖

dependencies : 作用用于引入工程的依赖(jar)

 

例如:

<dependencies>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>

</dependencies>

 

11.5. 依赖管理器

dependencyManagement :作用用于管理依赖的版本,使用到时可以手动导入.不会出现传递导入.


<properties>
    <mysql.version>8.0.25</mysql.version>
    <spring.version>5.0.0</spring.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

 

maven的两大核心: 依赖的管理和项目的构建.

11.6. 依赖的传递性

例如: A --> B  那么导入A依赖时,B依赖也会导入进来.

 

11.7. 依赖的调节原则

依赖调节原则:

  1. 路径近者优先原则

比如:   A-->B-->C-->D (1.0版本)

H-->D-->E (2.0版本)

导入的是D版本为2.0版本

 

  1. 路径相同,第一声明优先的原则.

例如: A-->C-->D (1.0版本)

 H-->F -->D(2.0版本)

则导入D (1.0版本)

 

11.8. 依赖排除

不想使用的依赖可以排除掉


<exclusions>
    <exclusion>
        <artifactId>spring-core</artifactId>
        <groupId>org.springframework</groupId>
    </exclusion>
</exclusions>

 

11.9. 依赖的作用范围scope

compile: 全范围有效,在编译阶段使用到的依赖

test: 测试范围 ,在测试阶段使用的依赖

provided: 编译与测试范围,在编译与测试使用到的依赖.

runtime: 运行时用到的范围,项目运行时使用到的依赖

system: 系统范围,项目使用到系统内置的函数等

 

依赖范围

对编译有效

对测试有效

对运行有效

compile

test

provided

runtime

system

 

12. maven管理依赖常见的问题

因为远程的依赖无法下载到本地仓库,如果maven第一次下载依赖失败,maven是不会再次进行下载了(maven会在下载的jar包中生成一个.lastupdated的文件,用于标识该依赖,不再下载)

注意: 如果需要再次下载,需要手动删除.lastupdated的文件.

 

给同学们提供一个脚本文件,可以多个文件夹清除.lastupdated的文件.

 

 

13. 私服(第三方仓库,内部仓库)

13.1. 安装私服

 

 

解压到一个目录下即可使用,为了跟自已系统中的应用程序端口不冲突,建议修改:

 

 

以管理员的身份安装私服到系统服务:

 

 

 

 

访问私服的服务器:

http://localhost:9999/nexus/#welcome

 

默认的登录用户与密码:

admin

admin123

 

 

13.2. maven使用第三方仓库

 

配置自已的私服:

 

13.3. 配置阿里的仓库

 

posted @   linzm14  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示