2017-11-20 21 views
2

私はこのようにBOM(部品表)として使用するpom.xmlを持っています。定義済みの依存関係の1つは、このBOMのライブラリを使用するコードのテストに使用される*-test成果物です。Maven BOM(BOM)で依存関係の範囲を定義することをお勧めしますか?

*-test成果物がBOM自体のtestスコープ用であること、またはBOMのユーザーが必要に応じてプロジェクトのPOMで指定する必要があることを指定することが適切であるか?

私はこれを行うと、例えば、春のフレームワークBOMは、確かに、明示的に任意の範囲を定義していません。どのように既存のプロジェクトを見ていた
<?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> 

しかし、私はまだこれについて何か書かれていないルールがあるかどうか疑問に思っていますか?

+2

あなたのポームのユーザーに、従属依存関係にどのスコープを割り当てるかを決めるのがベストプラクティスです。 – khmarbaise

答えて

2

ではなく、BOM(または親のPOM)に設定することをお勧めします。

BOMにスコープを設定すると、その依存関係のデフォルトスコープがユーザープロジェクトからわかるように変更されます。 mavenのデフォルトの依存関係スコープはcompileです。したがって、コンパイルするときに依存関係のスコープを省略するのが一般的です。 BOMによって別のスコープが設定されている場合、BOMを使用する他の開発者(または後の時点でも自分自身)には驚くかもしれません。