mvn 相关命令汇总

mvn 相关命令汇总本文详细介绍了 Maven 中的关键命令 如 clean compile test package 和 deploy 以及依赖管理 pom xml 结构 build 标签的 resource 部分和 plugin

大家好,欢迎来到IT知识分享网。

1、需求

   项目上一致是使用的mvn 进行打包, 对于项目上的一些mvn  命令,有时候会忘记,所以将mvn 汇总起来

mvn 相关命令汇总

2、命令汇总 

  ① mvn clean 

      将项目目录下的编译的文件清除掉,即target 文件夹的编译文件

mvn 相关命令汇总

    mvn 相关命令汇总

② mvn complie

    编译项目的代码,生成class 文件到target文件夹下

mvn 相关命令汇总

③ mvn  test

    对项目进行运行测试

④  mvn package 

    打包文件并存放到项目的target 目录下,打包好的文件通常都是编译后的class 文件 

 mvn 相关命令汇总

 ⑤ mvn install 

        在本地仓库生成仓库的安装包, 可供其他项目引用,同时打包后的文件放到项目的target 目录下。

⑥ mvn  deploy 

     完成了项目编译、单元测试 、打包功能,把打好的可执行jar包(war 包或者其他形式的包) 部署到本地maven 仓库,同时部署到maven 私服仓库

maven — 依赖管理系统 

     通过maven 的依赖管理对项目所依赖的jar 进行统一管理,比如: 项目依赖 junit4.9, 通过在pom.xml 中定义junit 4.9 的依赖即使用junit 4.9 ,如下所示是junit 4.9 的依赖定义

<!--依赖关系 --> <dependencies> <!-- 此项目运行使用junit ,所以此项目依赖 junit --> <dependency> <!-- junit 的项目名称 --> <groupId> junit</groupId> <!-- junit 的模块名称 --> <artifactId>junit</artifactId> <!-- junit 版本 --> <version>4.9</version> <!-- 依赖范围:单元测试使用 junit --> <scope>test</scope> </dependency> </dependencies> 

3、拓展 

    ① 如何快速定位到所依赖的包的依赖的关系

     答: 这里通过 maven Hepler 来 排查对应的包依赖

          即 先在 插件市场中安装对应的依赖 maven Hepler 

          定位到项目所在的 pom 文件中,然后打开底部的 Dependency Analyzer 

 mvn 相关命令汇总

然后查询图中的说明就可以找到对应的依赖

mvn 相关命令汇总

② maven中的pom 依赖中的build  是干啥的?

答: 

   resource 

      配置各个资源在maven 项目中的具体路径,用于包含或者排查某些资源文件,标签resource 包含一下元素

   

标签 类型 描述
targetPath String 指定build后的resource 存放的文件夹,默认是basedir,通常被打包在jar 中的resource 的目标路径 META-INF
filtering String 表示为这个resource,filter是否激活,默认为false
directory String 资源文件源路径,默认位于${basedir}/src/main/resources/目录下
include List<String> 一组文件名的匹配模式,被匹配的资源文件将构建过程处理
excludes List<String> 一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略
<build> <filters> <filter>filters/filter1.properties</filter> </filters> <resources> <resource> <targetPath>META-INF/plexus</targetPath> <filtering>true</filtering> <directory>${basedir}/src/main/plexus</directory> <includes> <include>configuration.xml</include> </includes> <excludes> <exclude>/*.properties</exclude> </excludes> </resource> </resources> </build>

 plugin 

    设置构建过程中需要的插件,标签plugin 包含以下元素

execution

   execution 元素包含了插件执行需要的信息  

   configuration  

           不管是plugin 还是execution 都有元素configuration,该标签包含的元素和插件执行目标相关,为插件执行目标提供自定义传参,所以configuration 内元素各不相同,和执行目标提供的对外参数相关。

<?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"> ... <build> <plugins> <!-- 使用spring-boot-maven-plugin打包独立可执行程序 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.4.2.RELEASE</version> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <finalName>milkyway-pc</finalName> <classifier>1.0-SNAPSHOT</classifier> <outputDirectory>../target</outputDirectory> </configuration> </plugin> </plugins> </build> </project> 

上述使用了maven 常用插件 spring-boot-maven-plugin ,使用该插件的默认goal:  repackage(使用标签executions) ,该goal 会在mvn  package 之后,再次打包可执行的jar/war ,并将mvn package 生成的软件包重名为 *.original。 使用标签configuration 为插件 spring-boot-maven-plugin 传参,配置最终生成的jar包,注: 该configuration 内的元素可以参考插件spring-boot-maven-plugin 提供了哪些对外配置的参数

③ dependencyManagement 是干啥用的,它与dependencies 区别

       如果dependencies 里的dependency 自己没有声明version 元素,那么maven 就会到dependencyManagement 里面去找有没有对该artifactId 和groupId 进行版本生命,如果有,就继承它,如果没有就会报错,告诉你必须为dependency 生命一个version

     如果dependencies 中的denpendency 声明了version, 那么无论dependencyManagement 中有无该jar的version生命,都已dependency 里的version为准。     

 答: (1) dependencies 及时在子项目中不写该依赖,那么子项目仍然会从父项目中继承该依赖项(全部继承)

 (2)   dependencyManagemeent里只是声明依赖,并不实现引入

 (3) 因此子项目需要显示的声明需要用到的依赖,如果不在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项。并且version和scope 都读取父pom, 另外如果子项目中指定了版本号,那么会使用子项目中指定jar版本

      (简单来说就说,父级dependencyManagemeent 只是定义了版本,并不引入。)

<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.0</version> </dependency> </dependencies> </dependencyManagement> 

 会实际下载的jar包:

 <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.0</version> </dependency> </dependencies> 

④  plugins 和pluginManagement 的区别

  

    pluginsManagement 是表示插件生命,即你在项目中的pluginManagement下声明了插件,Maven 不会加载该插件,pluginManagement 声明可以被继承。 

      pluginManagement 一般是用在父 pom中定义,提供给子pom 使用,子pom也可以覆盖这个定义,而且你在父pom中定义了版本之后,子模板直接应用groupId 和 artifactId ,而不指定版本。

      plugins就是直接引入一个plugin,而且可以绑定到maven 相关的声明周期上

      pluginManagement 主要是为了统一管理插件,确保所有子pom使用的插件版本保持一致。

<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement>

子pom 

   

<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> </plugin> </plugins>

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109897.html

(0)
上一篇 2026-02-04 07:45
下一篇 2026-02-04 08:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信