Java 多模块项目。包括:父模块和子模块:客户端、共享、服务器。如何?

Java 多模块项目。包括:父模块和子模块:客户端、共享、服务器。如何?,java,build,Java,Build,我想有多模块的web应用程序项目。有一个包含3个子模块的父模块: 客户端、共享、服务器 我想用maven来构建它 我想客户端可以访问:服务器和共享模块代码 我想共享可以访问的:服务器模块代码 我无法实现的依赖性 client -> shared -> server client -> server 它可以用maven构建吗 以下是我目前的POM: 家长: <modules> <module>server</module> &

我想有多模块的web应用程序项目。有一个包含3个子模块的父模块:

客户端、共享、服务器

我想用maven来构建它

我想客户端可以访问:服务器和共享模块代码

我想共享可以访问的:服务器模块代码

我无法实现的依赖性

client -> shared -> server
client -> server
它可以用maven构建吗

以下是我目前的POM:

家长:

<modules>
    <module>server</module>
    <module>shared</module>
    <module>client</module>
</modules>
客户:

<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>server</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>server</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
共享没有依赖项

服务器:

<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
编辑


我希望我的共享模块能够访问服务器模块代码,但当我在共享模块中向服务器模块添加依赖项时,我得到了一个关于循环依赖项的错误,无法生成项目。我的问题是如何在所有子模块中准备POM来实现这一点?正如您所看到的,共享模块现在没有任何依赖项

脱离maven上下文在您的体系结构中存在循环依赖性问题。
没有两个模块可以相互依赖,因为在这种情况下,您无法构建它们。您可以做的是创建另一个模块,它的名称可能与真正的共享模块类似,共享模块和服务器模块都依赖于此,或者您可以重新排列您的共享模块,使其不依赖于任何模块,而其他模块依赖于它。

正如我所知,依赖关系是可传递的

因此:

客户:

<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>server</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>server</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
服务器:

<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>pl.derp</groupId>
        <artifactId>shared</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

我倾向于让生活变得更简单,只需要两个模型模块,代理和客户端代码

e、 g

我不能完全肯定你能用三个模块做到这一点,因为它们相互依赖


FWIW我们有用于数据库、模型和客户端的模块gwt web client,因为它可以分离主要关注点并保持依赖关系正常。

您的设置看起来不错,你的问题到底是什么?在模块之间建立适当的依赖关系,就是这样…是的,问题是什么?我希望我的共享模块能够访问服务器模块代码,但当我在共享模块内向服务器模块添加依赖关系时,我收到一个关于周期依赖关系的错误,无法构建项目。我的问题是如何在所有子模块中准备POM来实现这一点?正如您所看到的,共享模块现在没有任何依赖项。为什么要为代理将共享模块和客户端模块一分为二?我认为这样的拆分对于希望在客户机和服务器之间共享的java逻辑等是有意义的。然而,代理是用于通信的,所以只有servlet/web感兴趣?所以,如果客户端可以访问服务器,而服务器可以访问共享,这意味着客户端也可以访问共享?不幸的是,这不起作用,因为我无法从共享模块内部访问服务器类。我遇到一个错误:实体无法解析为类型共享/代理代码需要查看服务器代码,因此我认为这不起作用。您能给出一个模块列表及其依赖项的示例吗?