繁体   English   中英

Maven:对 pom 模块的依赖不包括其中的子模块

[英]Maven: Dependency to pom module is not include submodules from it

项目有下一个结构:

root
|
+--Module 1
|  |
|  +--Submodule_1
|  |
|  +--Submodule_2
|  |
|  +--Submodule_N
|
+--Module 2

Module 2依赖于Module 1和从子模块 1..N 对类的预期访问

Root pom.xml:

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>root</artifactId>
    <version>master</version>
    <packaging>pom</packaging>

    <modules>
        <module>Module_1</module>
        <module>Module_2</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
</project>

Module 1 pom.xml:

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>root</artifactId>
        <version>master</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Module_1</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>Submodule_1</module>
        <module>Submodule_2</module>
        ...
        <module>Submodule_N</module>
    </modules>
</project>

Submodule_N _N pom.xml:

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>Module_1</artifactId>
        <version>master</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Submodule_N</artifactId>
</project>

Module 2 pom.xml:

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>root</artifactId>
        <version>master</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Module_2</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>Module_1</artifactId>
            <version>master</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

所以这个配置失败,错误package com.example.submodule_n.xy does not exist

如果将module 1的依赖项添加到submodule_n而不是 package 将被发现,但 maven 失败并出现错误...is referencing itself

如果将依赖项从module 2添加到submodule_n ,则一种工作情况。 但是当module 2module 1只有一个依赖项以包含来自module 1的所有子模块时,这是预期的方式。

它可以做 gradle,但我不知道它是如何使用 maven 实现的。

如果将依赖项从模块 2 添加到 submodule_n,则一种工作情况。 但是,当模块 2 对模块 1 只有一个依赖项以包含来自模块 1 的所有子模块时,这是预期的方式

那是您的期望实际上是无效的。

配置的目的如:

 <modules> <module>Submodule_1</module> <module>Submodule_2</module>... <module>Submodule_N</module> </modules>

是为了以某种方式组织项目结构,它与 java 库之间的依赖关系没有任何共同之处(尽管它会影响构建生命周期),此外,配置如下:

 <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>Module_1</artifactId> <version>master</version> <scope>compile</scope> </dependency> </dependencies>

通常没有意义,因为库可能不依赖于 pom - 实际上这只是告诉 maven 在Module_1之后构建Module_2

总结上面的陈述:如果Module_2依赖于 Submodule_N 您必须在Submodule_N中明确定义该依赖项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM