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

时间:2015-12-01 20:28:15

标签: eclipse maven m2e

我们在几个团队之间共享了一些Maven模块,即使我们的项目使用不同的依赖项和资源,也需要共享源代码。为实现此目的,我们按照“{3}}中的建议”在“从单一源目录生成多个唯一JAR”中设置模块。具体来说,我们有一个共享父模块,其中包含src目录,但其pom声明<packaging>pom</packaging>并且只构建两个子模块。每个子模块都继承自此父模块,并使用以下命令引用共享的src目录:

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

这两个子模块具有不同的工件ID,允许依赖模块和项目指定所需的版本和依赖关系集。它还坚持“一个模块,一个输出”的Maven原则。

这在Maven-land中非常有用:编译,安装,部署等。不合适的是Eclipse集成。有些事情很好:构建模块,部署到我们的Maven仓库,拉入依赖项来构建我们的项目。但是诸如代码完成和跳转到类/方法定义之类的东西根本不起作用。就好像Eclipse完全不识别源代码一样。

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

所以我的问题是:我们如何才能让Eclipse识别代码并执行正常的代码导航,同时满足我们不同的项目要求?我错过了一些简单的Eclipse配置吗?我们是否需要重新修改我们的Maven模块结构,如果是,那该怎么办?

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

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

更新(12/8/15)

我最终能够通过在“配置构建路径...”对话框中使用“链接源...”来使Eclipse识别源目录。添加源文件夹不允许我引用模块的父目录,但链接源让我分配一个任意目录来使用。它并不理想,但似乎有效。

1 个答案:

答案 0 :(得分:1)

我最终能够通过使用&#34;链接源来使Eclipse识别源目录...&#34;在&#34;配置构建路径......&#34;对话。添加一个源文件夹不会让我引用该模块的父目录,这使我离开了一段时间。但是,Link Source让我指定一个任意目录来使用。

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