Maven 多模块项目:Eclipse 中缺少模块

And*_*nek 3 eclipse maven m2e

我使用描述多模块项目的原型在 Eclipse 中创建了一个新的 Maven 项目。它部分地作为例外工作并且我已经习惯了。在 Project Explorer 中,模块显示为顶层的项目,而不是父项目的子文件夹。在我的硬盘上,文件夹结构显示了父根项目文件夹下的模块。我现在习惯于在 Navigator 中看到相同的结构,但它显示的文件夹结构与 Project Explorer 相同。

为了让这更烦人,我使用Maven=>手动创建了另一个模块New Maven Module Project。该模块按预期运行。它在导航器中显示为父文件夹的子文件夹,我可以提交它。

将其可视化:

硬盘上的结构(在导航器中预期):

- parentProject
| - module1
| - module2
| - manuallyCreatedModule
Run Code Online (Sandbox Code Playgroud)

导航器和项目浏览器中的结构:

-parentProject
| - manuallyCreatedModule
- module1
- module2
- manuallyCreatedModule
Run Code Online (Sandbox Code Playgroud)

我已经将手动创建的模块和其他模块的 poms 和项目首选项与最后一个细节进行了比较,似乎无法找到这种不同行为的原因。poms 的相关部分似乎是相同的:

父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>myId</groupId>
    <artifactId>parentProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>module1</module>
        <module>mdoule2</module>
        <module>manuallyCreatedModule</module>
    </modules>
</project>
Run Code Online (Sandbox Code Playgroud)

原型模块 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>
    <parent>
        <artifactId>parentProject</artifactId>
        <groupId>myId</groupId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>module1</artifactId>
</project>
Run Code Online (Sandbox Code Playgroud)

手动创建的模块 pom:

<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>
    <parent>
        <artifactId>parentProject</artifactId>
        <groupId>myId</groupId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>manuallyCreatedModule</artifactId>
</project>
Run Code Online (Sandbox Code Playgroud)

你会看到没有明显的区别。对于模块 poms 我只是省略了依赖项。手动创建的模块也在构建部分使用了maven-ear-pluginjboss-as-maven-plugin,但我无法想象它们与问题相关。

我还尝试从导航器创建模块文件夹,它告诉我它们已经存在。它只是不显示它们。

我不能处理这种行为的原因是,如果我想将父项目共享到我们的 CVS,Eclipse 不提供提交模块。无论如何,我已经尝试过并提交了父项目和一个可见模块。如果我现在同步,其他模块仍然不会出现。我可以将每个模块手动共享到 CVS 中的父文件夹中,但我害怕副作用。

有谁知道这是什么原因以及我如何获得一致的行为?我可以接受所有这些都没有显示在导航器中,但我还需要一种方法来提交它们。我想最好的解决方案是让所有模块在导航器的父项目文件夹中显示自己。

更新

从 Eclipse 中删除项目(不删除文件)并重新导入它们解决了行为不一致的问题。现在我看不到父级下面的任何模块。这给我留下了如何正确提交它们的问题。我可以将每个模块手动共享到已经提交的父文件夹中,但这对我来说似乎不是正确的方法。

更新 2

在@Behe 和@cowls 的共同帮助下,我设法想出了这个解决方法:

  • 从 Eclipse 中删除项目(不删除文件)
  • 仅重新导入父项
  • 现在显示模块,我能够进行初始提交
  • 再次删除项目
  • 重新导入父模块和所有模块

现在模块已正确提交并且可以同步。由于这是一种解决方法(或至少感觉是一种解决方法),因此我仍然对以下问题的答案感兴趣:

如何让模块在它们的 parants 目录中显示自己,以便我可以提交它们而不会失去将模块作为项目资源管理器中单独项目的优势?

小智 5

我遇到过同样的问题。我正在使用 Spring Tool Suite 的版本:4.4.2.RELEASE。为了解决这个问题,我右键单击父项目并转到配置 --> 配置和检测嵌套项目。那生成了我的子模块。在此之前,我已将所有子模块添加到与父模块相同的工作集。您可以通过右键单击每个子模块或单击包资源管理器中的向下箭头“V”来实现。