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

时间:2014-03-18 11:05:22

标签: eclipse maven m2e

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

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

想象它:

硬盘上的结构(以及导航器中的预期结果):

- parentProject
| - module1
| - module2
| - manuallyCreatedModule

Navigator和Project Explorer中的结构:

-parentProject
| - manuallyCreatedModule
- module1
- module2
- manuallyCreatedModule

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

父母:

<?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>

Acrhetype modules 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>

手动创建模块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>

您会发现没有明显的差异。对于poms模块,我只省略了它们。手动创建的模块还使用构建部分中的maven-ear-pluginjboss-as-maven-plugin,但我无法想象它们与问题相关。

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

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

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

更新

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

更新2

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

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

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

如何让模块在parants目录中展示自己,这样我就可以提交它们而不会失去在Project Explorer中将模块作为单独项目的优势?

2 个答案:

答案 0 :(得分:4)

我有同样的问题。我正在使用版本:4.4.2.Spring Tool Suite的发布。 要解决此问题,我右键单击父项目,然后转到“配置->配置和检测嵌套项目”。这产生了我的子模块。 在此之前,我已将所有子模块添加到与父级相同的工作集中。您可以通过右键单击每个子模块或单击Package Explorer中的向下箭头“ V”来实现。

答案 1 :(得分:1)

我不确定为什么这是一个问题。

但这只是通过如何在Eclipse中导入项目来定义的。

如果您只在eclipse中导入父项目,您将在项目资源管理器中的一个项目中看到它们。

如果您选择导入所有maven项目,它们将被视为单个项目。无论哪种方式,如果你从Eclipse提交它们,它们都会被提交到同一个地方。