maven clean/install/build/package命令行详解(中)

简介: maven clean/install/build/package命令行详解(中)

4 避坑指南

  • 对于多模块的项目,注意父 pom 会设置 JDK 版本,注意对齐版本号!

image.png

项目对象模型 POM

它是使用Maven工作时的基本组件,是一个xml文件。它被放在工程根目录下,文件命名为pom.xml。

POM包含了关于工程和各种配置细节的信息,Maven使用这些信息构建工程。


POM 即 Project Object Module,项目对象模型,在 pom.xml 文件中定义了项目的基本信息、源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的 url、以及构建项目所用的插件,依赖继承关系。开发人员需按照 maven 定义的规则进行 POM 文件的编写


<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/maven-v4_0_0.xsd"> 
 <modelVersion>4.0.0</modelVersion> 
 <! – The Basics – > 
 <groupId> … </groupId> 
 <artifactId> … </artifactId> 
 <version> … </version> 
 <packaging> … </packaging> 
 <dependencies> … </dependencies> 
 <parent> … </parent> 
 <dependencyManagement> … </dependencyManagement> 
 <modules> … </modules> 
 <properties> … </properties> 
 <! – Build Settings – > 
 <build> … </build> 
 <reporting> … </reporting> 
 <! – More Project Information – > 
 <name> … </name> 
 <description> … </description> 
 <url> … </url> 
 <inceptionYear> … </inceptionYear> 
 <licenses> … </licenses> 
 <organization> … </organization> 
 <developers> … </developers> 
 <contributors> … </contributors> 
 <! – Environment Settings – > 
 <issueManagement> … </issueManagement> 
 <ciManagement> … </ciManagement> 
 <mailingLists> … </mailingLists> 
 <scm> … </scm> 
 <prerequisites> … </prerequisites> 
 <repositories> … </repositories> 
 <pluginRepositories> … </pluginRepositories> 
 <distributionManagement> … </distributionManagement> 
 <profiles> … </profiles> 
</project>

在每个 POM 文件中都含有的元素是该 project 的坐标,包含三个基本元素:


groupId 定义了项目属于哪个组,这有助于在大的范围上区别项目

artifactId 定义了这个项目在组中唯一的 ID,通常是工程的名称

groupId 和 artifactId 一起定义了artifact 在仓库中的位置。

name 是一个用户友好的项目名称


除了项目坐标外,modelVersion 指定 POM 模型的版本,version 指明当前项目的版本,packaging 指定了项目发布时的打包类型。


Maven 插件和仓库

Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,仅仅定义了抽象的生命周期,所有这些任务都交给插件来完成的。每个插件都能完成至少一个任务,每个任务即是一个功能,将这些功能应用在构建过程的不同生命周期中。这样既能保证拿来即用,又能保证 maven 本身的繁杂和冗余。


将生命周期的阶段与插件目标相互绑定,就可以在特定的阶段完成具体的构建任务。例如下面的代码就是要在 validate 这个阶段执行 maven-antrun-plugin 的 run 目标,具体的任务在 元素中定义。

<plugins> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.6</version> 
<executions> 
<execution> 
    <id>version</id> 
   <phase>validate</phase> 
   <configuration> 
<target> 
   具体任务
</target> 
</configuration> 
<goals> 
<goal>  run  </goal> 
    </goals> 
</execution> 
    </executions> 
    </plugin> 
</plugins>

Maven 项目中的插件,依赖和项目构建的输出都可以由 Maven 的坐标进行唯一的区分,基于这种机制,Maven 将所有项目的构件文件放置在一个统一的位置,也就是 Maven 仓库。所有 Maven 项目可以从同一个 Maven 仓库中获取自己所需要的依赖 JAR,这节省了磁盘资源。实际的 Maven 项目中不需要存储依赖的文件,只需要在 POM 文件中生成依赖关系,在构建的时候 Maven 就会自动去仓库中下载。


在安装了 Maven 的机器上,会生成一个 ~.m2\repository 目录,这个目录被称为本地仓库,当 Maven 查找需要的依赖时,首先会在本地查找,如果本地仓库中存在,则直接使用,否则 Maven 回去远程仓库查找,查找到后下载到本地进行使用。远程中央仓库的地址为 http://repo1.maven.org/。当然还有一些镜像仓库可供使用,有兴趣的读者可以参考 Maven 官方网站的相关介绍。


当个人所在的网络无法访问公共的 Maven 仓库时,可以在 settings.xml 中设置代理服务器。打开 ~.m2\settings.xml,如果没有则复制 $Maven_HOME/conf/settings.xml 到此路径下,加入

<proxies> 
  <proxy> 
     <active>true</active> 
     <protocol>http</protocol> 
     <host> 代理地址 </host> 
     <port>8080</port> 
     <username> 用户名 </username> 
     <password> 密码 </password> 
   </proxy> 
</proxies>


目录
相关文章
|
6月前
|
Java 测试技术 Maven
maven 打jar包:mvn clean package
maven 打jar包:mvn clean package
82 7
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
247 81
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
5月前
|
缓存 IDE Java
maven install报错原因揭秘:‘parent.relativePath‘指向错误的本地POM文件
在使用Maven构建项目时,遇到&#39;parent.relativePath&#39;错误通常是由于父项目POM路径设置错误、版本不一致或内容不匹配导致的。解决方法包括:校正父项目POM的相对路径、确保版本一致、保持POM文件内容同步,并排查其他潜在问题,如子模块命名冲突和Maven缓存问题。通过这些步骤可解决该错误,避免项目构建失败。
maven install报错原因揭秘:‘parent.relativePath‘指向错误的本地POM文件
|
28天前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
5月前
|
Java Maven
Maven命令行参数详解
Maven命令行参数详解
185 0
|
5月前
|
缓存 Java Maven
IDEA如何把MAVEN项目打包成jar包并且用命令行启动
IDEA如何把MAVEN项目打包成jar包并且用命令行启动
78 0
|
6月前
|
Java Maven
Maven【4】(继承)(命令行操作)
Maven【4】(继承)(命令行操作)
45 1
|
6月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
64 0
|
6月前
|
Java Maven
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
61 0
|
6月前
|
Java Maven
Maven【1】(命令行操作)
Maven【1】(命令行操作)
61 0