Eclipse 没有从工作区中的 Maven 模块中看到 类

Eclipse doesn't see classes from Maven modules in workspace

我们有一些 Maven 模块在几个团队之间共享,即使我们的项目使用不同的依赖项和资源,也必须共享源代码。为此,我们按照 "Producing Multiple Unique JARs from a Single Source Directory." 下的 Using Maven When You Can't Use the Conventions 中的建议设置了我们的模块。具体来说,我们有一个包含 src 目录的共享父模块,但其 pom 声明 <packaging>pom</packaging> 并且只构建两个子模块。每个子模块都继承自这个父模块,并使用这个引用共享 src 目录:

<build>
    <sourceDirectory>../src/main/java</sourceDirectory>
</build>

两个子模块有不同的工件id,允许依赖模块和项目指定他们需要的版本和依赖集。也秉承了"one module, one output."

的Maven原则

这一切在 Maven 领域都很好用:编译、安装、部署等。Eclipse 集成不太好用。有些事情工作正常:构建模块,部署到我们的 Maven 存储库,引入依赖项来构建我们的项目。但是诸如代码完成和跳转到 class/method 定义之类的事情根本不起作用。就好像 Eclipse 根本不识别源一样。

如果我们只是从 SVN 检出一个模块,Eclipse 不知道 类 而是使用 repo 中的 jars。如果我们随后将模块作为 Maven 模块导入,它们将显示在包资源管理器和项目构建路径中。但是,所有对这些 类 和方法的引用现在都被 Eclipse 标记为错误。而且我们仍然没有代码完成或导航。

所以我的问题是:我们如何让 Eclipse 识别代码并进行正常的代码导航,同时仍然满足我们不同的项目需求?我是否缺少一些简单的 Eclipse 配置?我们是否需要重新设计我们的 Maven 模块结构,如果需要,如何?

一些额外的上下文:项目的不同依赖关系相当大,包括 Weblogic 和 Spring 等事物的不同主要版本。 Weblogic 版本将在明年某个时候收敛,但其他依赖项会更慢(并且一些资源文件可能始终保持不同)。因此,在近期和中期,我们必须考虑项目之间的不同依赖关系。

我们正在使用配置文件来允许我们的 Jenkins 服务器构建两个子模块,同时允许各个开发人员仅构建他们的项目需要的子模块。使用配置文件来管理依赖关系是有问题的,因为我们失去了依赖关系的传递性。

更新 (12/8/15)

我最终能够通过在 "Configure Build Path..." 对话框中使用 "Link Source..." 让 Eclipse 识别源目录。添加源文件夹不会让我引用模块的父目录,但是 Link Source 让我可以指定一个任意目录来使用。这并不理想,但它似乎有效。

我最终能够通过在 "Configure Build Path..." 对话框中使用 "Link Source..." 让 Eclipse 识别源目录。添加源文件夹不会让我引用模块的父目录,这让我有一段时间出轨了。但是,Link Source 让我指定一个任意目录来使用。

这并不理想,但似乎有效。我们现在可以使用 F3 跳转到定义,错误现在可以正确突出显示。足够好,我不觉得向其他团队推荐它是不好的。我希望 Eclipse 会自动允许引用父源目录,但至少手动干预是正确的。