banner
武大胆

武大胆

不能为这个世界留下些什么,但是却想在这个世界留下些什么!
bilibili
x
discord user
email
steam

工具篇-Maven

是什么?#

  • Apache Maven是一个由 java 语言编写的软件项目管理及自动构建工具

能干什么?#

项目构建和依赖管理#

  • 通过在项目对象模型(Project Object Model,POM)文件中添加 dependency 完成依赖管理

进行项目构建生命周期中的操作执行#

  • 通过使用 maven 中的插件进行配置,完成生命周期目标管理
阶段处理描述
清理 clean清理项目清理项目之前产出的 JAR/WAR 和构建信息
验证 validate验证项目验证项目是否正确且所有必须信息是可用的
编译 compile执行编译源代码编译在此阶段完成
测试 Test测试使用适当的单元测试框架(例如 JUnit)运行测试。
包装 package打包创建 JAR/WAR 包如在 pom.xml 中定义提及的包
检查 verify检查对集成测试的结果进行检查,以保证质量达标
安装 install安装安装打包的项目到本地仓库,以供其他项目使用
部署 deploy部署拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

如何使用?#

安装与配置#

目前 IDE 都是内置集成了 maven,一般安装 maven 的目的是为了在命令行中可以执行 maven 的生命周期操作,完成项目编译构建。

下载#

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

C:.
│  LICENSE
│  NOTICE
│  README.txt

├─bin
│      m2.conf
│      mvn
mvn.cmd
│      mvnDebug
mvnDebug.cmd
│      mvnyjp

├─boot
│      plexus-classworlds-2.8.0.jar
│      plexus-classworlds.license

├─conf
│  │  settings.xml
│  │  toolchains.xml
│  │
│  └─logging
│          simplelogger.properties

└─lib

配置#

环境变量配置#

  1. 新增系统变量MAVEN_HOME,值填写 maven 解压出来的根目录

image

  1. 环境变量 path 中新增一条记录 %MAVEN_HOME%\bin

image

  1. 验证环境变量配置生效

打开 cmd,输入 mvn -version 能够查询到 maven 的版本则说明 maven 配置成功

image

Maven 仓库配置#

  • 当需要引入依赖的 jar 包时,maven 会在本地仓库进行查找,本地资源仓库默认在用户目录的.m2 目录下的repository目录。
  • 如果本地没有对应资源,就会从中央仓库进行下载。
  • 由于中央仓库是境外服务器,所以需要将阿里云镜像加入到 maven 配置中。
  1. 中央仓库的修改

在 maven 目录的 conf 目录下,修改settings.xmlmirrors标签中加入如下内容:

修改完之后,把 settings.xml 文件复制到.m2 目录下,即可以被全局调用。

<mirror>		
  <id>alimaven</id>		
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>	
  <mirrorOf>central</mirrorOf>  
</mirror>

Tip

xml(extensible markup language 可扩展标记语言)
<元素 属性 ="属性值"> 内容 </ 元素 >
xml 中用 表示注释。

  1. 本地仓库的修改
<localRepository>/path/to/local/repo</localRepository>

IDEA 中的 maven 配置#

在 IDEA 中的File->Settings菜单里找到 Build,Execution,Deployment菜单,在Build tools 菜单中

点击 maven,确认User settings file文件是本地.m2 目录下的settings.xml文件,仓库目录是本地.m2 目录下的 repository 目录。

image

使用#

管理依赖#

在 project 元素中添加 dependencies,用 dependency 加依赖

maven 引入依赖:

  • 从本地仓库找
  • 中央仓库
  • 远程仓库 (自己内网搭建的仓库地址)

image

项目编译环境设置#

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

管理生命周期#

使用不同的 maven 构建插件来完成生命周期动作

  1. 执行测试代码
  • 项目中的测试代码运行可以直接通过执行 test 生命周期来完成;
  • 在编写了测试代码的项目中,maven 在完成打包操作时也会自动执行在test目录下的测试代码;
  • 而如果想要定制执行部分的测试代码或者有其它需求,则可以通过引入surefire插件来完成配置;
  • 在 pom 文件的元素里的元素里添加如下插件:
<!--            测试插件surefire-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.19</version>
                    </dependency>
                </dependencies>
                <!-- configuration元素可以省略,那么会默认运行/src/test/java下的所有文件 -->
                <!-- 在configuration中可以配置放在src/test/java目录下需要执行的类文件名 -->
                <configuration>
<!--                    如果要跳过单元测试执行,加上skipTests-->
<!--                    <skipTests>true</skipTests>-->
<!--    配置要执行的测试代码,配置类名即可。支持使用*做通配,比如*Test表示Test结尾的文件,也支持正则表达式-->
                    <includes>
                        <include>ErrorLoginTest</include>
                        <include>MavenJunitTest</include>
                    </includes>
<!--                    配置不执行的测试类-->
                    <excludes>
                        <exclude>LoginSuite</exclude>
                    </excludes>
                </configuration>
            </plugin>
  1. 打出一个可执行的 jar

可直接使用 java -jar 命令进行运行

  • 如果只需要打包项目为 Jar,不需要生成可运行的 Jar,直接顺序执行 clean 和 package操作即可。
  • 如果需要打出可执行的 Jar 包,则需要配置运行的主类入口,在 pom 文件中添加元素,在其中添加插件配置并且添加assembly插件配置,如下:
				<build>
						<plugins>
							<plugin>
								<artifactId> maven-assembly-plugin </artifactId>
								<configuration>
				<!--       表示需要使用项目中依赖的jar             -->
									<descriptorRefs>
										<descriptorRef>jar-with-dependencies</descriptorRef>
									</descriptorRefs>
				<!--                   如果需要可执行的jar -->
									<archive>
										<manifest>
										<!--在这里把要运行的类填进来。 -->
											<mainClass>com.testing.class12</mainClass>
										</manifest>
									</archive>
								</configuration>
								<executions>
									<execution>
										<id>make-assembly</id>
										<phase>package</phase>
										<goals>
											<goal>single</goal>
										</goals>
									</execution>
								</executions>
							</plugin>
						</plugins>
					</build>
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。