mvn 相关命令汇总

1、需求

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

2、命令汇总 

  ① mvn clean 

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

    

② mvn complie

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

③ mvn  test

    对项目进行运行测试

④  mvn package 

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

 

 ⑤ 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 

 

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

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

答: 

   resource 

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

   

标签类型描述
targetPathString指定build后的resource 存放的文件夹,默认是basedir,通常被打包在jar 中的resource 的目标路径 META-INF
filteringString表示为这个resource,filter是否激活,默认为false
directoryString资源文件源路径,默认位于${basedir}/src/main/resources/目录下
includeList<String>一组文件名的匹配模式,被匹配的资源文件将构建过程处理
excludesList<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>

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值