maven拾遗

1、finalName 元素

打包构件的时候,如果想给构件取一个名字,就用 finalName 元素,如

<build>
    <finalName>order</finalName>
</build>

如果不指定包名,默认包名是 a r t i f a c t I d − {artifactId}- artifactId{version}.jar(war)。这在打包 war 类型的构件时尤其有用,毕竟 order.war 要比 order-1.0.war 方便部署得多。

2、scope 元素

scope 元素是 dependency 元素的子元素,如

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <scope>compile</scope>
</dependency>

默认取值是 compile。

maven 项目在编译和运行时有三套 classpath 环境:

  • 主编译 classpath:也就是运行mvn compile时所使用的类路径
  • 主运行 classpath:也就是我们在 IDE 中运行项目时所使用的类路径
  • 测试编译和运行 classpath:也就是我们执行测试用例时所使用的类路径,这里测试用例的编译和运行使用的是同一套类路径

scope 有五种取值,分别是 compile、test、provided、runtime、system,其中 system 基本不常用,其余取值的含义如表所示:

有效/无效主编译classpath测试编译和运行classpath主运行classpath能否被传递
complie(默认)
test不能
provided不能
runtime

比如,如果 scope=provided,那么在运行mvn compile命令时或者执行测试用例时,类路径下能找到依赖的 jar 包,如果是运行主程序,而主程序的类中有引用依赖 jar 包中的类,那么会产生 ClassNotFoundException 异常。

最后一列能否被传递的意思是,A 依赖 B,B 依赖 C,B依赖C的 scope=provided,那么 C 不会被传递给 A。

3、scope=import

scope 元素还有个取值,为 import,不过这个取值只有在 dependencyManagement 元素存在的情况下才会起作用。一般地,我们做 maven 项目版本管理的时候,会自己定义一个父 POM 文件,父 POM 文件中使用 dependencyManagement 来管理各个依赖构件的版本,子模块只需要继承父 POM,如:

<parent>
    <groupId>cn.cjc</groupId>
    <artifactId>learn-parent</artifactId>
    <version>1.0</version>
</parent>

这时候,父 POM 文件中的 dependencyManagement 下的各个依赖构件的版本号需要自己写,但是如果图省事的话,父 POM 中也可以直接将 spring-boot-dependencies 拿来用,如

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这就是 scope=import 的作用。注意,type=pom。

当然,父 POM 中也可以选择继承 spring-boot-dependencies,这个根据个人喜好选择。

4、optional 元素

optional 元素是 dependency 元素的子元素,表示可选依赖,如

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <optional>true</optional>
</dependency>

当 A 依赖 B,B 依赖 C,B依赖C的 optional=true,那么 C 不会被传递给 A。

5、可继承的 POM 元素

  • groupId
  • version
  • description
  • organization
  • url
  • developers
  • contributors
  • distributionManagement
  • issueManagement
  • ciManagement
  • scm
  • properties
  • dependencies
  • dependencyManagement
  • repositories
  • build
  • reporting
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值