【问题标题】:Is it good practice to define scope of dependencies in Maven BOM (bill of materials)?在 Maven BOM(物料清单)中定义依赖范围是一种好习惯吗?
【发布时间】:2017-11-20 14:55:05
【问题描述】:

我有一个像这样的pom.xml 用作 BOM(材料清单)。已定义的依赖项之一是 *-test 工件,用于测试使用此 BOM 中的库的代码。

问题是:在 BOM 本身中指定 *-test 工件仅适用于 test 范围是否合适/良好做法,还是应该留给 BOM 的用户在其项目的 POM 中指定,如果需要?

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.mylib</groupId>
    <artifactId>mylib-bom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>MyLib (Bill of Materials)</name>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.example.mylib</groupId>
                <artifactId>mylib-cool-library</artifactId>
                <version>${project.version}</version>
            </dependency>    
            <dependency>
                <groupId>com.example.mylib</groupId>
                <artifactId>mylib-test</artifactId>
                <version>${project.version}</version>
                <scope>test</scope> <!-- === HERE === -->
            </dependency>    
        </dependencies>
    </dependencyManagement>    
</project>

我正在研究现有项目是如何做到这一点的,例如,Spring Framework BOM 实际上并没有明确定义任何范围。但我仍然想知道是否有一些不成文的规定?

【问题讨论】:

  • 最好让 pom 的用户决定适当的依赖项应该具有哪个范围...

标签: maven maven-bom


【解决方案1】:

最佳实践是让用户决定范围,在 BOM(或父 pom)中设置它。

当您在 BOM 中设置范围(compile 以外的任何内容)时,您会更改该依赖项的默认范围,从用户项目中可以看出。 maven 中默认的依赖范围是compile,所以当你希望它被编译时,通常的做法是省略依赖的范围。如果 BOM 强加了另一个范围,那么对于使用该 BOM 的其他开发人员(甚至在以后的某个时间点您自己)来说,这可能是一个令人讨厌的惊喜。

【讨论】:

  • 所以本质上,BOM 中的范围不遵循记录的行为 - compile 并且当它们出现在 BOM 中时,没有任何范围的行为不同。我希望 Maven 文档本身更清楚这一点。
  • @Trejkaz 因为compile 是默认范围,您可以在 BOM 中设置它而不改变依赖项目的行为,尽管它是多余的。我的回答集中在设置上,例如testprovided 在 BOM 中。我编辑了我的答案以澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2017-06-21
  • 2022-06-23
  • 2016-03-20
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多