1.pom.xml文件 - pom.xml说明

2023-10-27

史上最全的 pom.xml 文件详解:史上最全的 pom.xml 文件详解_雨雾清影的博客-CSDN博客_pom.xml 

参考:Maven的pom.xml文件详解------Build Settings_tomato__的博客-CSDN博客_pom中build

  1. dependencies和dependencyManagement以及plugins和pluginManagement的区别

    1. dependencies和dependencyManagement区别
      dependencies:子POM会完全继承父POM中声明的dependencies,如果子POM中没有声明某个依赖项,但是父POM中声明了该依赖项,就会直接从父POM中继承该依赖项,如果子POM也声明另外相同依赖包,那么子POM会覆盖父POM中依赖声明。dependencyManagement:只是声明依赖,并不实现引入,除非子POM显示声明需要用该依赖项。如果不在子POM中声明依赖,是不会从父POM中继承依赖的;只有在子POM中声明了该依赖项,并且没有指定具体版本,才会从父POM中继承该项,并且version和scope都读取自父POM;另外如果子POM中指定了版本号,那么会使用子POM中指定的jar版本。
      总结:dependencyManagement其实只是一个管理jar的作用,是管理jar的版本,其他的什么作用都没有,只是定义找到该jar的三维坐标,并不是真正的去执行下载的jar的功能。

    2. plugins和pluginManagement的区别
      plugins :就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。pluginManagement:是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

说明:

  1. maven – 为什么pom.xml的modelVersion是必要的,并且始终设置为4.0.0?
    <modelVersion>4.0.0</modelVersion>
    它总是设置为4.0.0在Maven 2和3,因为,目前,没有其他模型。
    Notice that modelVersion contains 4.0.0 . That is currently the only supported POM version for Maven 2 and is always required
    但如果有另一个版本的模型,它不一定需要总是设置为4.0.0。 POM必须遵守一个模型。让我们说Maven 4提出了4.1版本。如果你写你的pom符合4.1,它不会与Maven 3和模型4.0.0兼容。
    它被定义为强制性的,可能强制实施特定的XML模型,以便在定义新模型的情况下。

  2. 指定打包后的名字

        <build>
            <!-- 如果没有,会生成默认的名字 -->
            <finalName>iiot-ident-provider</finalName>
        </build>


plugins 插件:

1.maven-compiler-plugin 插件

maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。
maven的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin插件可以指定项目源码的jdk版本,编译后的jdk版本,以及编码。
详解:Maven中配置maven-compiler-plugin 插件 - 楼兰胡杨 - 博客园

<plugin>                                                                                                                                      
    <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 -->                                                                           
    <groupId>org.apache.maven.plugins</groupId>                                                                                               
    <artifactId>maven-compiler-plugin</artifactId>                                                                                            
    <version>3.1</version>                                                                                                                    
    <configuration>                                                                                                                           
        <!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中不能使用低版本jdk中不支持的语法),会存在target不同于source的情况 -->                    
        <source>1.8</source> <!-- 源代码使用的JDK版本 -->                                                                                             
        <target>1.8</target> <!-- 需要生成的目标class文件的编译版本 -->                                                                                     
        <encoding>UTF-8</encoding><!-- 字符集编码 -->
        <skipTests>true</skipTests><!-- 跳过测试 -->                                                                             
        <verbose>true</verbose>
        <showWarnings>true</showWarnings>                                                                                                               
        <fork>true</fork><!-- 要使compilerVersion标签生效,还需要将fork设为true,用于明确表示编译版本配置的可用 -->                                                        
        <executable><!-- path-to-javac --></executable><!-- 使用指定的javac命令,例如:<executable>${JAVA_1_4_HOME}/bin/javac</executable> -->           
        <compilerVersion>1.3</compilerVersion><!-- 指定插件将使用的编译器的版本 -->                                                                         
        <meminitial>128m</meminitial><!-- 编译器使用的初始内存 -->                                                                                      
        <maxmem>512m</maxmem><!-- 编译器使用的最大内存 -->                                                                                              
        <compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument><!-- 这个选项用来传递编译器自身不包含但是却支持的参数选项 -->               
    </configuration>                                                                                                                          
</plugin> 

一般如此就行:

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

2.spring-boot-maven-plugin

Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能。
Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。
Spring Boot Maven plugin的最新版本为2017.6.8发布的1.5.4.RELEASE,要求Java 8, Maven 3.2及以后。

  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <version>2.0.1.RELEASE</version>
              <!--没有下面的部分,打包完成后运行可能会报错没有主清单属性-->
              <executions>
                  <execution>
                      <goals>
                          <goal>repackage</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
  </build>

注意:可以指定启动类:spring-boot-maven-plugin插件的作用 - 贾树丙 - 博客园

1.作用:springboot默认使用spring-boot-maven-plugin 来打包,这个插件会将项目所有的依赖打入项目jar 包里面。
spring-boot-maven-plugin插件的作用:

2.Spring Boot Maven plugin的5个Goals

  1. spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
  2. spring-boot:run,运行Spring Boot应用
  3. spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  4. spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  5. spring-boot:build-info,生成Actuator使用的构建信息文件build-info.properties

3.mvn package spring-boot:repackage说明
Spring Boot Maven plugin的最主要goal就是repackage,其在Maven的package生命周期阶段,能够将mvn package生成的软件包,再次打包为可执行的软件包,并将mvn package生成的软件包重命名为*.original。
基于上述配置,对一个生成Jar软件包的项目执行如下命令:

mvn package spring-boot:repackage  

可以看到生成的两个jar文件,一个是*.jar,另一个是*.jar.original。

 

在执行上述命令的过程中,Maven首先在package阶段打包生成*.jar文件;然后执行spring-boot:repackage重新打包,查找Manifest文件中配置的Main-Class属性,如下所示:

Manifest-Version: 1.0  
Implementation-Title: gs-consuming-rest  
Implementation-Version: 0.1.0  
Archiver-Version: Plexus Archiver  
Built-By: exihaxi  
Implementation-Vendor-Id: org.springframework  
Spring-Boot-Version: 1.5.3.RELEASE  
Implementation-Vendor: Pivotal Software, Inc.  
Main-Class: org.springframework.boot.loader.JarLauncher  
Start-Class: com.ericsson.ramltest.MyApplication  
Spring-Boot-Classes: BOOT-INF/classes/  
Spring-Boot-Lib: BOOT-INF/lib/  
Created-By: Apache Maven 3.5.0  
Build-Jdk: 1.8.0_131  

注意,其中的Main-Class属性值为org.springframework.boot.loader.JarLauncher;

Start-Class属性值为com.ericsson.ramltest.MyApplication。

其中com.ericsson.ramltest.MyApplication类中定义了main()方法,是程序的入口。

通常,Spring Boot Maven plugin会在打包过程中自动为Manifest文件设置Main-Class属性,事实上该属性究竟作用几何,还可以受Spring Boot Maven plugin的配置属性layout控制的,示例如下

注意,其中的Main-Class属性值为org.springframework.boot.loader.JarLauncher;

Start-Class属性值为com.ericsson.ramltest.MyApplication。

其中com.ericsson.ramltest.MyApplication类中定义了main()方法,是程序的入口。

通常,Spring Boot Maven plugin会在打包过程中自动为Manifest文件设置Main-Class属性,事实上该属性究竟作用几何,还可以受Spring Boot Maven plugin的配置属性layout控制的,示例如下

<plugin>  
  <groupId>org.springframework.boot</groupId>  
  <artifactId>spring-boot-maven-plugin</artifactId>  
  <version>1.5.4.RELEASE</version>  
  <configuration>  
    <mainClass>${start-class}</mainClass>  
    <layout>ZIP</layout>  
  </configuration>  
  <executions>  
    <execution>  
      <goals>  
        <goal>repackage</goal>  
      </goals>  
    </execution>  
  </executions>  
</plugin> 

注意,这里的layout属性值为ZIP。layout属性的值可以如下:

  1. JAR,即通常的可执行jar,Main-Class: org.springframework.boot.loader.JarLauncher
  2. WAR,即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided,Main-Class: org.springframework.boot.loader.warLauncher
  3. ZIP,即DIR,类似于JAR
    1. MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher
    2. NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher
    3. Main-Class: org.springframework.boot.loader.PropertiesLaunche

4.integration-test阶段中的Spring Boot Maven plugin的start/stop

<properties>  
  <it.skip>false</it.skip>  
</properties>  
<build>  
  <plugins>  
    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-failsafe-plugin</artifactId>  
      <configuration>  
        <skip>${it.skip}</skip>  
      </configuration>  
    </plugin>  
    <plugin>  
      <groupId>org.springframework.boot</groupId>  
      <artifactId>spring-boot-maven-plugin</artifactId>  
      <version>1.5.4.RELEASE</version>  
      <executions>  
        <execution>  
          <id>pre-integration-test</id>  
          <goals>  
            <goal>start</goal>  
          </goals>  
          <configuration>  
            <skip>${it.skip}</skip>  
          </configuration>  
        </execution>  
        <execution>  
          <id>post-integration-test</id>  
          <goals>  
            <goal>stop</goal>  
          </goals>  
          <configuration>  
            <skip>${it.skip}</skip>  
          </configuration>  
        </execution>  
      </executions>  
    </plugin>  
  </plugins>  
</build>  

注意,it.skip变量用作是否跳过integration-test的标志位。

maven-failsafe-plugin用作integration-test的主要执行目标。

spring-boot-maven-plugin用以为integration-test提供支持。

执行integration-test的Maven命令如下:

mvn verify

或者

mvn verify -Dit.skip=false

参考链接:68. Spring Boot Maven Plugin

Spring Boot Maven Plugin Documentation

Spring Boot Maven Plugin – Spring Boot

Build Tool Plugins

3.maven-dependency-plugin插件

之前介绍了使用spring-boot-maven-plugin插件打jar包,会把所有的依赖文件都导入,然后变成了一个可执行的jar包。这样的不好的地方就是,我实际上并不需要把依赖的jar包也打入到生成的jar包里面去,仅仅需要把当前项目的代码打包。生成的jar包只要能引用到它所依赖的jar包,并且可以执行就好了。

作用:这个maven-dependency-plugin依赖的作用就是自动拷贝jar包到target目录(和eclipse  打包 runnable jar file的第三种方式类似 JAVA-打包成jar包_yigg的博客-CSDN博客_java打包成jar包

参考:Maven项目打Jar包,如何添加依赖 - 贾树丙 - 博客园

4.maven-resources-plugin

作用:拷贝资源文件 到指定的resource目录

			<!-- 4.maven-resources-plugin 插件:拷贝资源文件 到指定的resource目录-->
			<!-- 此插件适用于资源文件找不到的情况的可以使用,一般可不使用 -->
			<plugin>
			    <artifactId>maven-resources-plugin</artifactId>
			    <executions>
			        <execution>
			            <id>copy-dependencies</id>
			            <phase>package</phase>
			            <goals>
			                <goal>copy-resources</goal>
			            </goals>
			            <configuration>
			                <!-- 资源文件输出目录 -->
			               <outputDirectory>${project.build.directory}/resources</outputDirectory>
			                <resources>
			                    <resource>
			                        <directory>src/main/resources</directory>
			                        <filtering>true</filtering>
			                        <!--包含的文件-->
			                        <includes>
			                            <include>*/**</include>
			                        </includes>
			                    </resource>
			                </resources>
			            </configuration>
			        </execution>
			    </executions>
			</plugin>

5.maven-war-plugin插件

作用:Maven打war包时,排除和包含指定文件或目录

参考:maven-war-plugin:Maven打war包时,排除和包含指定文件或目录_琦彦的博客-CSDN博客_packagingexcludes正则表达式

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archiveClasses>false</archiveClasses>
                    <packagingIncludes>
                        WEB-INF/lib/common-core-1.0.0.jar,
                        WEB-INF/lib/common-util-1.0.0.jar,
                        WEB-INF/lib/service-api-1.0.0.jar,
                        WEB-INF/lib/iiot-redis-1.0.0.jar,
                        WEB-INF/lib/iiot-amq-1.0.0.jar,
                        WEB-INF/lib/iiot-oss-1.0.0.jar,
                        WEB-INF/lib/iiot-entity-1.0.0.jar,
                        WEB-INF/classes/cn/**,
                        WEB-INF/classes/mapping/**,
                        WEB-INF/classes/*.properties,
                        WEB-INF/classes/*.conf,
                        WEB-INF/jsp/**,
                        static/**
                    </packagingIncludes>
                    <archive>
		              <manifest>
		                <mainClass>cn.rntd.IdentApp</mainClass>
		              </manifest>
		            </archive>
                </configuration>
            </plugin>

resources

作用:指定目录为资源目录

        <!-- 如果没报错,可忽略此配置 -->
        <resources>
            <!--注册webapp目录为资源目录-->
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

maven中的可选依赖<optional>true</optional>

maven中的可选依赖<optional>true</optional>_明快de玄米61的博客-CSDN博客_<optional>true</optional>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.pom.xml文件 - pom.xml说明 的相关文章

随机推荐

  • kettle使用常见问题解决-01

    kettle常见问题解决 1 kettle界面connect消失 第一步 检查IE浏览器 不能低于10 第二步 在数据资源仓库的database里描述写中文 导致repositories xml出现乱码 解决方法 1 找到 kettle目录
  • ant design pro 一个页面两个表单,提交会相互影响,需将表单写为自定义组件

    描述 在页面 组件 中 只能有一个 Form create 意味着this props form唯一 如果一个页面有两个表单 提交其中一个 另一个也会提交 然而你只想提交一个 解决方法 1 如果表单多且复杂 请单独自定义一个页面 组件 我这
  • 了解Hadoop输入输出系统

    与任何I O子系统不同 Hadoop还带有一组原语 这些原始的考虑因素虽然本质上是通用的 但与Hadoop IO系统一起也具有一些特殊的含义 Hadoop处理数TB的数据集 对这些原语的特殊考虑将使你了解Hadoop如何处理数据输入和输出
  • 华为、腾讯、阿里、网易员工下班时间大曝光,靠加班,你是赢不了他们的

    这年头 不加班都不好意思说自己是上班族的 但有一种行业的疯狂加班程度 已经逐渐成为加班领域的一颗新星 那就是 互联网行业从事者 也许你对华为 阿里的加班水平早有耳闻 但你是否见过他们疯狂加班的样子呢 首先出场的阿里巴巴 19 55 00 0
  • 生成10个随机数保存于数组中,并找出其最大值和最小值

    上代码吧 bin bash 生成19个随机数保存于数组中 并找出其最大值和最小值 declare a rand declare i max min for i in 0 9 do rand i RANDOM echo rand i if i
  • CTFHUB-WEB

    HTTP协议 题目 请求方式 思路一 我们知道http请求方式中没有CTFB方式 就想到CTFHUB 使用BP抓包 将原来的数据包请求方式GET改成CTFHUB 点击Forward 放包 得到flag 积累 HTTP协议的八种请求方式 1
  • 典型案例 3:十分钟搭建弹性可扩展的 Web API

    作者 萧起 阿里云云原生团队 导读 本节课程主要分为三个部分 基本概念中介绍基于函数计算的 WebAPI 与普通的 WebAPI 的区别及优势 开发流程中介绍如何在函数计算的控制台进行 WebAPI 的开发 操作演示中会实例演示函数计算 W
  • mysql-索引_MySQL-索引

    mysql 索引 MySQL 索引 MySQL INDEXES A database index is a data structure that improves the speed of operations in a table In
  • 基于MATLAB的图像复原视图分析技术

    基于MATLAB的图像复原视图分析技术 摘要 图像质量的好与坏受很多方面因素的影响 其中运动模糊以及失真是较为主要的因素 这些因素贯穿在图像获取 传输以及储存的全过程中 本次设计用到的是MATLAB软件然后进行仿真 对模糊图像建立退化模型
  • Spring系列文章:Spring事务

    一 事务简述 1 什么是事务 Transaction tx 在 个业务流程当中 通常需要多条DML insert delete update 语句共同联合才能完成 这 多条DML语句必须同时成功 或者同时失败 这样才能保证数据的安全 多条D
  • 单机redis和redisCluster集群获取所有key

    对于单机redis keys 对于redis cluster集群 redis cli c a CLUSTER AUTH cluster call CLUSTER IP CLUSTER POPRT keys 如 redis cli c clu
  • L1正则和L2正则的比较分析详解

    感受 上次有个面试官问我l1正则和l2正则有什么区别 当时把我给问傻了 于是就回来找了资料写了这篇博客 我参照的是英文博客 吸取别人的长处 希望能帮助大家 如有错误或者需要补充的 欢迎指正 咱们共同进步 范数 norm 数学上 范数是一个向
  • actuator--基础--6.2--端点解析--metrics端点

    actuator 基础 6 2 端点解析 metrics端点 代码位置 https gitee com DanShenGuiZu learnDemo tree master actuator learn actuator01 1 介绍 用于
  • Ubuntu更改默认python版本的两种方法 python-> Anaconda

    当你安装 Debian Linux 时 安装过程有可能同时为你提供多个可用的 Python 版本 因此系统中会存在多个 Python 的可执行二进制文件 你可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件
  • 谷歌首页被360篡改

    打开浏览器后 右上角设置找到跳转到360的地址将其删除
  • 海明码校验【简单详细】

    海明码 1 什么是海明码 一个名叫Richard Hanming老爷爷在1950年提出的检验纠错方法 它具有一位纠错能力 2 海明码的计算方法 设欲检测的二进制代码为n位 K为检测位 提供纠错 总共n k位代码 当中检测位满足的关系 2 k
  • 将自己数据集转化为lmdb格式

    在caffe master github examples imagenet 路径下有convert imagenet sh文件 使用时有以下注意事项 注意点写在了代码注释里 usr bin env sh Create the imagen
  • Spring boot 日志框架

    SpringBoot能自动适配所有的日志 而且底层使用slf4j logback的方式记录日志 引入其他框架的时候 只需要 把这个框架依赖的日志框架排除掉即可
  • msvcr120.dll丢失怎样修复win11

    msvcr120 dll丢失怎样修复 相信这个问题困扰着不少小伙伴 msvcr120 dll是Windows系统中非常重要的组件 丢失或者损坏会导致很软件跟游戏无法打开运行 小编今天就把修复教程分享给大家 修复方法如下 首先打开电脑浏览器以
  • 1.pom.xml文件 - pom.xml说明

    史上最全的 pom xml 文件详解 史上最全的 pom xml 文件详解 雨雾清影的博客 CSDN博客 pom xml 参考 Maven的pom xml文件详解 Build Settings tomato 的博客 CSDN博客 pom中b