Eclipse构建路径嵌套错误

144

我正在为我的课程编写一个简单的JSP/Servlet/Tomcat Web应用程序。教授要求我们使用一个略微不同于默认动态Web项目结构的文件夹结构。他想要所有的源代码都放在src/main/java和src/main/webapp下,而不是使用webcontent文件夹。

当我运行这个应用程序时,我的欢迎页面正常显示,但是当我尝试访问我的servlet时,会出现如下错误:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. 我非常确定这是一个构建路径错误。我已将final/src添加到构建路径中,但我仍然收到警告。

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

图片描述

我在我的部署程序集中有这个:

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

当我排除 main/ 后,警告消失了,但这并没有解决问题。我会感激任何建议。谢谢。

14个回答

348

即使我创建了一个全新的项目,我仍然遇到了同样的问题。我是在Eclipse中创建了Java项目,然后将其转换为Maven项目,接着进入java build path属性中删除src/并添加src/main/javasrc/test/java。当我运行Maven更新时,它通常会给出嵌套路径错误。
然后我终于意识到 - 因为我以前没有看到这个条目 - 在Mavenize时pom文件中有一行<sourceDirectory>src</sourceDirectory>。删除它后问题得到解决。


2
这只是众多随机技巧之一。没有解释原因。因此不太有帮助。 - smwikipedia
4
我刚刚将POM文件中的条目重命名为"scr/main/java",一切都很好。感谢acheron55的帖子。 - Beezer
你把它放在那里了吗?还是它从哪里来的? - Line
在我改变了maven-compiler-plugin的JDK版本之后,这个<sourceDirectory>src</sourceDirectory>出现在我的pom.xml中。 - Balu

26

我想在这个话题中提供一个非Maven式的答案。

由于版本控制和严格的目录结构原因,我无法遵循Acheron的答案(最佳答案),即类似于删除src/并将src/main/javasrc/test/java添加到构建路径。

我实际上已经断断续续地为此嵌套的构建路径问题奋斗了几周。问题的答案在错误消息中暗示:

要启用嵌套,请从'final/src'中排除'main/'

修复方法

在构建路径中,您需要通过单击Excluded: (None)然后单击Edit...来编辑您的Inclusion and Exclusion Patterns

  1. 转到导航器并在项目上点击鼠标右键
  2. 构建路径
  3. 配置构建路径
  4. 源(选项卡)

Exclusion Patterns

在那里,您可以将main/webapp/WEB-INF/classes添加为Exclusion Pattern。然后,它应该允许您将main/webapp/WEB-INF/classes作为单独的源文件夹添加到构建路径中。


很棒的回答。正好是我所遇到的问题。已点赞。 - The Dark Knight

25

这里是一个简单的解决方案:

  1. 右键单击项目 >> 属性 >> 构建路径;
  2. 在源选项卡中,选择所有源文件夹;
  3. 将它们移除;
  4. 右键单击项目,选择 Maven >> 更新项目。

3
谢谢你救了我的一天! - user1807337
2
这对我来说完美地运行,而无需更改任何配置。 - Michael Skarn
事半功倍! - undefined

10

试一下:

从“库”选项卡中:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

移除您的Web应用程序库:

click on "Web App Libraries" -> click "remove"

将它们重新加入:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

突出显示"Web应用程序库":

突出显示 "Web应用程序库"


4

在我的情况下,我有一个在eclipse中具有gradle nature的项目,在一个build.gradle文件中出现了问题,其中指定了这个sourceSets:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

这似乎与 IntelliJ 配合得很好,然而似乎 Eclipse 不喜欢嵌套的 srcsrc/javasrc/resources。在 Eclipse 中,我必须将其更改为:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}

4

我也遇到了同样的问题,但是上面给出的正确答案对我没有用。我的解决方法是去 构建路径->配置构建路径,然后在源选项卡下删除所有源代码(只有一个源代码),并从那里重新配置它们。最终,我将项目从eclipse中删除,并重新导入maven项目以清除错误。


亲爱的,你值得拥有全世界!非常感谢你。那是关于错误的Maven结构的全部内容。 - Matheus Santz

2
您需要将源代码和构建输出的目标目录分开。同时,重要的一点是注意不要让任何类文件出现在源代码目录中。这并不违背您教授的建议 - 实际上,他正在推广使用Maven标准源代码结构,即./src/main/java和./src/main/webapp。第二个目录应该包含必需的WEB-INF/web.xml文件,但您永远不会将实际的类文件放在这里。
您需要更改的是目标目录。我建议您遵循相同的标准,并选择名称"./target"。所有构建文件都将放在这里,打包后将得到一个正确的可部署的工件。如果您以后迁移到使用Maven,这也将有助于以脚本化、可重复的方式完成此操作。
希望这能解决您的问题。

2
被接受的解决方案对我没有用,但我在项目设置中进行了一些挖掘。
如果您使用的是动态Web项目,则以下解决方案对我至少有用:
1.右键单击项目,然后属性。(或者按下项目上的alt-enter)
2.在部署程序集下删除“src”。
您应该能够添加src/main/java。它还会自动将其添加到部署程序集中。
注意:如果您添加了src/test/java,请注意它也会将其添加到部署程序集中。通常,您不需要这个。您可以将其删除。

1

这让我陷入了修复Eclipse故障的漫长过程,然而我只是从Eclipse中删除了该项目并重新导入以解决问题。


1

为了让Eclipse编译器正常工作,您需要从源路径中删除final/src并添加final/src/main/java。这也可能解决您的问题,因为现在构建目录不会在Java源文件夹内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接