maven使用pom文件中的各标签的理解

maven中的scope

这个scope,就像是 写java注解时的 @Retention(xxx) 的那个感觉,大约是一种 “生命周期”的感觉。
能体会到,理解到这个意思,基本上就够了。具体只是生效到哪个阶段而已。

1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。
2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。
3、runtime:该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。
4、provided:该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作。
5、system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径(因为版权原因并不是所有依赖都从中央仓库下载的)
6、import: 一个dependencyManagement中的dependency,如果scope是import形式的,那么这个dependency不参与依赖传递。只是把dependency需要的依赖都取过来,像个占位符一样替换了就行。

以下为scope是system时举的例子:
例:有一个dm.jar在${basedir}/src/main/resources/lib目录下:

<dependency>
    <groupId>dm</groupId>
    <artifactId>dm</artifactId>
    <scope>system</scope>
    <version>1.0</version>
    <systemPath>${basedir}/src/main/resources/lib/dm.jar</systemPath>
</dependency>

如果是打包war包,并且打包完成后需要把本地的${basedir}/src/main/resources/lib/dm.jar和线上下载的依赖整合到一个目录的话,就还需要做如下配置:

    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <webResources>
            <resource>
                <!--把本地lib里面的jar复制到lib-->
                <directory>src/main/resources/lib</directory>
                <targetPath>WEB-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

更多标签参考

pom.xml文件里

<packaging>pom</packaging>的作用

  1. 顶级的,<packaging>pom</packaging>是什么?
  2. <dependency>节点里,<packaging>pom</packaging>是什么?

重头戏,<type>pom</type> 怎么理解?
在这里插入图片描述

我们从maven仓库下载下来的依赖有的是只有pom文件没有jar包的,这时候如果需要依赖这个pom文件就需要写<type>pom</type>

上图一红一绿两条线,说了两件事。
红线的可以解释<type>里的值是什么意思。
绿线里的可以解释为什么有些时候<dependency>里面的<type>有时候不用加,有时候不加却报错加了就不报错(即通常为了获取继承来的pom.xml里面的<properties>里的各种包的版本号之类的信息,没有的话就不能确定版本,当然报错)。

例子: maven pom 文件中 dependence 的 type 为 pom 是什么意思?

在 Maven 的 pom 文件中,dependence 节点用于声明对其他项目的依赖。如果 dependence 的 type 属性设置为 “pom”,则意味着你依赖的是另一个项目的 pom 文件,而不是实际的项目的编译后的代码或者二进制文件。

这种情况通常出现在你希望继承另一个项目的配置信息,而不需要实际依赖该项目的代码时。例如,你可能希望将你的项目与另一个项目使用相同的依赖版本,或者使用相同的插件配置。在这种情况下,你可以在自己的 pom 文件中声明对另一个项目的 pom 文件的依赖,并在自己的 pom 文件中继承该项目的配置信息

<project>
  <!-- 省略其他信息 -->
  <dependencies>
    <!-- 依赖另一个项目的 pom 文件 -->
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>other-project</artifactId>
      <version>1.0</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

在这个例子中,你的项目会依赖另一个项目的 pom 文件,但不会依赖另一个项目的代码。

build里的resource标签

resources中的***/*区别

  • \*指resource路径下,并不包含resource子文件夹下的文件
  • **/*指resource路径及其子路径下所有文件
  1. include、exclude可以配置多个路径,但路径不要重复,也别包含

include说明:打包时只保留include标签下的文件

include 的<filtering>说明:

  • true:可以规定指定路径下的xml包括properties文件在编译期,将文件指定的${key}替换掉;
    • 例如: 中我们使用${jdbc.url}来代表数据库地址。那么在Maven编译时,就会将${jdbc.url}替换成真正的地址。
    • false:不替换

exclude说明: exclude规定路径下的文件不被打包

exclude 的<filtering>说明

  • true: 不在exclude规定路径下,其他的文件由include决定
  • false: 不在exclude规定路径下,其他的文件不由include决定

include 、exclude二者可以配合使用,划定打包范围

默认情况下,maven打包会将资源目录(一般是src/main/resources)中的资源文件打包进去,而如果在pom.xml中配置了resources标签,则默认的资源打包策略就被覆盖掉了,只会打包resources标签中配置的资源文件**

基本结构:

<build>
    <resources>
        <resource>
            <directory>src/main/resource</directory>
	        <includes>
	             <include>...</include>
	        </includes>
	        <filtering>false</filtering>
        </resource>

        <resource>
            ...
        </resource>
    </resources>
<build>

案例:

<build>
	<resources>
			   <!-- 案例 1. 打包时只留下Java目录以及子目录下 .txt类型文件 -->
	           <resource>
	               <directory>src/main/java</directory>
	               <includes>
	                   <include>**/*.txt</include>
	               </includes>
	           </resource>
	           
	           <!-- 案例 2 保留 resources 下所有资源,不配置默认就是保存所有 -->
	           <!-- 案例 2.1 打包时留下resource目录以及子目录下所有文件 -->
	 			<resource>
	       	    	<directory>src/main/resources</directory>	         
	           </resource>
	           
				<!-- 案例 2.2 打包时留下resource目录以及子目录下所有文件,同案例二效果 -->
				<resource>
	       	    	 <directory>src/main/resources</directory>
	       	    	 <includes>
	                   <include>**/*.*</include>
	                   <include>**/*</include>   
	                </includes>	         
	           </resource>

				<!-- 案例 3. 打包时只留下resource目录以及子目录下的.yml文件 -->
				<resource>
	       	    	 <directory>src/main/resources</directory>
	       	    	 <includes>
	                    <include>**/*.yml</include>	                   
	                </includes>	         
	           </resource>

				<!-- 案例 4. 打包时除了resource目录以及子目录下的.yml文件,其他文件都会保留下来 -->
				<resource>
	       	    	 <directory>src/main/resources</directory>
	       	    	 <excludes>
                    	<exclude>**/*.yml</exclude>
                	</excludes>	         
	           </resource>
  					 
	</resources>
</build>

maven的打包类型

pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。

项目的打包类型

<packaging>pom</packaging>
<packaging>jar</packaging>
<packaging>war</packaging>

packing默认是jar类型,

  • pom ---------> 父类型都为pom类型
  • jar ---------> 内部调用或者是作服务使用
  • war ---------> 需要部署的项目

如果有时候springboot启动不了,那么有时候是启动类所在模块的pom.xml中jar改成了pom,改回来一般能启动.

mavensettings.xml标签

mirror标签
Maven 在构建 Spring Boot 项目时会根据 元素中定义的顺序依次尝试使用镜像源。如果找到可用的镜像源,将使用该镜像源进行构建。如果所有镜像源都不可用,将回退到默认的 Maven 中央仓库。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值