如何在Maven中使用多个模块依赖POM

时间:2017-02-19 14:39:59

标签: maven dependencies dependency-management

我必须在我的项目POM中包含几个库,这些库都是{P}中的siddhi-extensions的子模块:

http://maven.wso2.org/nexus/content/repositories/releases/org/wso2/siddhi/siddhi-extensions/3.0.3/siddhi-extensions-3.0.3.pom

如下所示添加此依赖项:

Missing artifact org.wso2.siddhi:siddhi-extensions:jar:3.0.3.


<dependencies>  
    <dependency>
        <groupId>org.wso2.siddhi</groupId>
        <artifactId>siddhi-extensions</artifactId>
        <version>3.0.3</version>
    </dependency>
</dependencies>

使用dependencyManagement不会包含连续的所有子模块:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.wso2.siddhi</groupId>
            <artifactId>siddhi-extensions</artifactId>
            <version>${siddhi.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

我可以只导入siddhi-extensions导入siddhi-extensions项目中的所有子模块库吗?

1 个答案:

答案 0 :(得分:0)

org.wso2.siddhi:siddhi-extensions:3.0.3:pom不包含<dependencyManagement>

虽然我在Introduction to the Dependency Mechanism, Importing Dependencies明确地找不到此内容,但似乎继承<dependencyManagement>(来自父org.wso2.siddhi:siddhi:3.0.3:pom)并未被<scope>import覆盖。

那么,项目中的<dependencyManagement>会被忽略(构建的输出中是否没有相应的消息?)因此依赖项org.wso2.siddhi:siddhi-extensions:3.0.3的打包类型默认为jar不存在。

但是,该文件说:

  

当用于定义通常是多项目构建的一部分的相关工件的“库”时,导入最有效。一个项目使用这些库中的一个或多个工件是相当常见的。 [...]下面的模式说明了如何创建“物料清单”(BOM)以供其他项目使用。

     

项目的根目录是物料清单[ siddhi:siddhi:pom ]。它定义了将在库中创建的所有工件的版本。其他希望使用该库的项目应将此pom导入其pom的dependencyManagement部分。

     

[...]

     

父子项目将BOM pom作为其父项。这是一个普通的多项目pom。 [您的siddhi:siddhi-extensions:pom ]

解决方案:

  • 在项目的<dependencyManagement>/<dependency>
  • 中导入org.wso2.siddhi:siddhi:3.0.3:pom
  • 为您需要的<dependencyManagement>/<dependency>模块添加siddhi-extension-...声明。