0
点赞
收藏
分享

微信扫一扫

maven的安装,配置,在idea中使用以及依赖管理和模块化

何以至千里 2022-03-24 阅读 59

maven

1.前提条件:正确配置了JDK的环境变量

命令提示符中检查:java -version

2.配置环境变量M2_HOME = maven的根目录

在path中追加%M2_HOME%\bin

mvn -version 也就是mvn -v

3.创建maven项目

项目名(根目录)

pom.xml

src

​ main

​ java

​ resources

​ test

​ java

​ resources

进入到项目的根目录(有pom.xml文件)下面,执行相关的命令

有如下命令:

mvn clean

mvn compile

mvn package

mvn install

命令的写法有两种:

直接写命令:mvn package

组合使用命令:mvn clean package

命令 的执行有如下特点:

TODO:下一阶段的命令会包含上面阶段的命令(还没有讲)

4.maven的配置

两级配置结构,一个用户级别,一个系统级别,两者都有以用户级别为准

系统级别的配置是在:maven安装目录下的conf/settings.xml

用户级别的配置:默认是没有配置文件的,可以把系统级别的settings.xml文件拷贝到用户目录下的 .m2 文件下

配置项有2个:

localRepository
E:/repo :自己在E盘配置maven本地仓库repo

mirror

<localRepository>E:/repo</localRepository>

<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</morrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</morror>

5.maven 仓库使用方式

项目或者命令所要用到的依赖、插件都是需要下载的,默认是下从本地仓库查找,找不到就到远程的中央仓库去查找.

由于远程仓库在国外,国外有相关的镜像(mirror)

6.archetype创建项目

archetype翻译架构类型,就是说有一系列的项目模板结构(架构类型)

mvn archetype:generate ,接着按提示操作

用的是archetype: quickstart

Maven安装

下载与安装

1.从maven 官网下载Maven的安装包,下载地址:http://maven.apache.org/download.cgi
在这里插入图片描述
2.接下来查看自己的JDK环境变量是否配置,输入:java -version
在这里插入图片描述
3.配置maven环境变量
在这里插入图片描述
编辑path环境变量
在这里插入图片描述
4.检查是否配置好 :mvn -version
在这里插入图片描述
这就配置好了

maven的项目结构

目录说明
src/main/java存放Java源代码的目录,这个目录下存放package以及Java源文件
src/main/resources存放项目所需要 的资源文件和配置文件,例如xml、properties文件等
src/test/java存放单元测试类的源码目录
src/test/resources存放单元测试所需的资源文件或配置文件
target用于存放编译后的文件以及Maven打包的文件
pom.xml项目对象模型

项目名(根目录)如下:

pom.xml

src

​ main

​ java

​ resources

​ test

​ java

​ resources

进入到项目的根目录(有pom.xml文件)下面,执行相关的命令

有如下命令:

mvn clean

mvn compile

mvn package

mvn install

命令的写法有两种:

直接写命令:mvn package

组合使用命令:mvn clean package

Maven配置

两级配置结构,一个用户级别,一个是系统级别,两者都有以用户级别为准

系统级别的配置是在:maven安装目录下的conf/settings.xml

用户级别的配置:默认是没有配置文件的,可以吧系统级别的settings.xml文件拷贝到用户目录下的.m2文件夹下

配置项有2个:

  • localRepository
  • mirror:mirrorOf与url是不能错的
<localRepository>E:/repo</localRepository>
<mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

配置本地仓库

1.首先将maven安装目录中的conf目录中settings.xml文件复制
在这里插入图片描述
到C盘配置maven后生产的.m2文件夹中,将.m2中原来的文件夹进行删除

2.接着对复制过来的settings.xml文件进行配置

​ 加入 E:/repo
在这里插入图片描述
E盘中的repo就是我们的本地仓库了
在这里插入图片描述
那我们在接下来的项目实践中,本地仓库有的就从本地仓库取,没有的就需要从中央仓库中取了

私服

私服也是远程仓库的一种,私服通常和开发人员的本地仓库在一个局域网中,在一些公司内部都会见到私服的存在,当对外网访问有限制时,那么私服的所用就显现出来了。通俗的讲,私服是建立在本地仓库和远程仓库之间。

maven仓库的使用方式

项目或者命令所要用到的依赖、插件都是需要下载的,默认是先从本地仓库查找,找不到就到远程的中央仓库去查找。

由于远程仓库在国外,国内有相关的镜像(mirror)

maven下idea中的使用

单模块项目的搭建

1.新建一个Project,选择Maven,勾选create from archetype,选择图中webapp
在这里插入图片描述
2.next,项目名称
在这里插入图片描述
3.idea会自动帮我们下载好,我们把build删除掉
在这里插入图片描述
4.下面是我的一个项目中的pom.xml文件

<?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.nf</groupId>
    <artifactId>maven-web-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>

                <configuration>
                    <warSourceDirectory>web</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.5.v20170502</version>
                <configuration>
                    <scanIntervalSeconds>3</scanIntervalSeconds>
                    <webAppSourceDirectory>web</webAppSourceDirectory>
                    <webAppConfig>
                        <contextPath>/</contextPath>
                    </webAppConfig>
                    <httpConnector>
                        <port>8088</port>
                    </httpConnector>


                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5.这些东西可以去玩一玩
在这里插入图片描述
多模块项目的搭建

1.New Project ,直接点机下一步
在这里插入图片描述

2.项目名称:xxx-parent,然后finish

在这里插入图片描述

3.Project Structure 中Modules 点 + 号

4.New Module,next

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TauWntpC-1648082652753)(images\m16.jpg)]

5.Parent中选择xxx-parent, Name中填写xxx-dao等,建多个

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgjgCHX2-1648082652753)(images\m17.jpg)]

​ xxx-web中加一个构面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2xpqkfP-1648082652754)(images\m18.jpg)]

6.各个模块中编写相应代码,在各个pom.xml中填写依赖(注意依赖传递性和排除依赖)

Maven依赖管理和模块化

依赖管理

Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。

功能功能描述
依赖调节决定当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。 如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用。
依赖管理直接的指定手动创建的某个版本被使用。例如当一个工程 C 在自己的依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用的版本。
依赖范围包含在构建过程每个阶段的依赖。
依赖排除任何可传递的依赖都可以通过 “exclusion” 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”。
依赖可选任何可传递的依赖可以被标记为可选的,通过使用 “optional” 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。

依赖的传递性

A–>B B–>C

A–>C

依赖的优先级别

路径最短优先

路径一样的话,声明优先的原则

依赖排除

假如A依赖BB依赖C,想要B不依赖C就在<dependency>中添加

<exclusions>
	<exclusion>
		<groupId>com.nf</groupId>
		<artifactId>C</artifactId>
	<exclusion>
</exclusions>

可选依赖

同上,排除A对C的依赖,用可选依赖也能达到同样效果,即在B依赖C的时候设置为true

依赖范围

范围说明
compile在编译,测试,运行时都需要
test测试时需要,编译和运行不需要(例如:junit)
runtime测试和运行时需要,编译不需要(例如:JDBC驱动)
provided编译和测试时需要,运行时不需要,由运行环境提供(例如:servlet-api)
system本地依赖,不在maven中央仓库

生命周期

maven在构建一个项目时将一个整体的任务划分为一个个的阶段,类似一个工作流水线,按顺序依次进行,这就是maven的构建生命周期。各生命周期之间相互独立

Clean生命周期

用于在进行真正的构建之前进行一些清理工作

阶段说明
pre-clean执行清理前需要完成的工作
clean清理上一次构建过程中生成的文件,比如编译后的 class 文件等
post-clean执行清理后需要完成的工作

Default生命周期

定义了构建项目时所需要的执行步骤,它是所有生命周期中最核心部分,包含的阶段如下表所述,比较常用的阶段用粗体标记

名称说明
validate验证项目结构是否正常,必要的配置文件是否存在
initialize做构建前的初始化操作,比如初始化参数、创建必要的目录等
generate-sources产生在编译过程中需要的源代码
process-sources处理源代码,比如过滤值
generate-resources产生主代码中的资源在 classpath 中的包
process-resources将资源文件复制到 classpath 的对应包中
compile编译项目中的源代码
process-classes产生编译过程中生成的文件
generate-test-sources产生编译过程中测试相关的代码
process-test-sources处理测试代码
generate-test-resources产生测试中资源在 classpath 中的包
process-test-resources将测试资源复制到 classpath 中
test-compile编译测试代码
process-test-classes产生编译测试代码过程的文件
test运行测试案例
prepare-package处理打包前需要初始化的准备工作
package将编译后的 class 和资源打包成压缩文件,比如 rar
pre-integration-test做好集成测试前的准备工作,比如集成环境的参数设置
integration-test集成测试
post-integration-test完成集成测试后的收尾工作,比如清理集成环境的值
verify检测测试后的包是否完好
install将打包的组件以构件的形式,安装到本地依赖仓库中,以便共享给本地的其他项目
deploy运行集成和发布环境,将测试后的最终包以构件的方式发布到远程仓库中,方便所有程序员共享

site 生命周期

用于生成项目报告

阶段说明
pre-site执行生成站点前的准备工作
site生成站点文档
post-site执行生成站点后需要收尾的工作
site-deploy将生成的站点发布到服务器上

模块化

模块化的好处

1.通过合理的模块拆分,实现代码的复用性,便于维护和管理

2.maven的模块化可分为父模块和子模块,它同样具备面向对象思想中的继承和聚合

继承

继承就是避免重复,maven的继承也是这样,它还有一个好处就是让项目更加安全

我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入

1.说到继承肯定是一个父子结构,那么我们在aggregator中来创建一个parent project

2.: 作为父模块的POM,其打包类型也必须为POM

3.结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录

4.新的元素: , 它是被用在子模块中的

5.元素的属性:: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找

6.relativePath的默认值: …/pom.xml

7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素

参考网址https://blog.csdn.net/wanghantong/article/details/36427411

聚合

把多个项目或模块聚合到一起,可以在父模块中聚和所有的子模块,只需要在父模块的pom文件中将所有的子模块配置在中,中的每一个分别指定各个子模块的名称

<packageing></packageing>
<!- 聚合所有子模块 ->
<modules>
	<module>project-m1</module>
	<module>project-m2</module>
	<module>project-m3</module>
</modules>

好处

使用聚合的好处就是当构建整个项目的时候,不需要为每一个子模块分别构建一次,只需要在父模块(相当于整个项目)执行一次构建命令即可,此时会将所有的子模块一并进行构建

依赖子模块

pom属性说明
${project.build.directory}项目构建输出目录,默认为target/
${project.build.outputDirectory}项目主代码编译输出目录,默认为target/classes/
${project.build.testOutputDirectory}项目测试代码编译输出目录,默认为target/testclasses/
${project.build.sourceEncoding}表示主源码的编码格式
${project.build.sourceDirectory}项目的主源码目录,默认为src/main/java/
${project.build.testSourceDirectory}项目的测试源码目录,默认为/src/test/java/
${project.build.finalName}表示输出文件名称
${project.version}表示项目版本,与${version}相同
${project.groupId}项目的groupId
${project.artifactId}项目的artifactId
举报

相关推荐

0 条评论