138

我正在为我的班级开发一个简单的 JSP/Servlet/Tomcat webapp。教授要求我们使用与默认动态 Web 项目结构略有不同的文件夹结构。他不想使用 webcontent 文件夹,而是希望我们在 src/main/java 和 src/main/webapp 下的所有源代码。

当我运行应用程序时,我的欢迎文件显示正常,但是当我尝试访问我的 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/ 时,警告消失了,但它并不能解决问题。我会很感激任何建议。谢谢。

4

13 回答 13

336

即使我创建了一个新项目,我也遇到了同样的问题。我在 Eclipse 中创建 Java 项目,然后对其进行 mavenize,然后进入 java 构建路径属性,删除和src/添加. 当我运行 Maven 更新时,它曾经给出嵌套路径错误。 然后我终于意识到——因为我之前没有见过那个条目——当我对它进行 mavenize 时,pom 文件中有一行。删除后就解决了。src/main/javasrc/test/java
<sourceDirectory>src</sourceDirectory>

于 2013-03-14T13:49:19.047 回答
25

我想对这个线程给出一个非专家的答案。

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

实际上,我已经断断续续地与这个嵌套构建路径问题作斗争了几个星期。错误消息中提示了问题的答案:

To enable the nesting exclude 'main/' from 'final/src'

使固定

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

  1. 转到导航器并右键单击项目
  2. 构建路径
  3. 配置构建路径
  4. 来源(标签)

排除模式

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

于 2016-02-22T15:00:07.420 回答
10

试试这个:

从库选项卡:

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

删除您的网络应用程序库:

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 应用程序库”:

突出显示

于 2014-05-23T21:04:46.733 回答
10

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

  1. 右键项目>>属性>>构建路径;
  2. 在源选项卡中,选择所有源文件夹;
  3. 删除它们;
  4. 右键单击项目,Maven >> 更新项目。
于 2019-04-11T12:02:33.920 回答
4

我有同样的问题,上面的正确答案对我不起作用。我为解决它所做的就是转到Build Path->Configure Build Path源选项卡并在源选项卡下删除所有源(只有一个源)并从那里重新配置它们。我最终从 eclipse 中删除了项目并再次导入了 maven 项目以清除错误。

于 2017-04-04T15:06:45.327 回答
3

就我而言,我在eclipse中有一个 gradle 自然项目,问题出在 a 中build.gradle,其中sourceSets指定了:

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

这似乎与intelliJ配合得很好,但似乎eclipse不喜欢嵌套src,,src/javasrc/resources日食中,我必须将其更改为:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
于 2018-03-08T15:52:19.453 回答
2

您必须将构建输出所在的源和目标目录分开。同样重要的是要注意,任何类文件都不能最终出现在源目录中。这并不违反你教授的建议——实际上他正在推广适用于 ./src/main/java 和 ./src/main/webapp 的 maven 标准源代码结构。第二个应该持有例如。强制性的 WEB-INF/web.xml 文件,但你永远不会把实际的类放在那里。

您需要更改的是您的目标目录。我建议使用相同的标准并为此选择名称“./target”。所有构建的文件都将放在此处,并将其打包将产生正确的可部署工件。如果您稍后迁移到使用 maven,它也将有助于以脚本化、可重复的方式执行此操作。

希望能解决您的问题。

于 2012-05-31T17:42:48.770 回答
2

接受的解决方案对我不起作用,但我对项目设置进行了一些挖掘。

如果您使用的是动态 Web 项目,则以下解决方案至少为我修复了它:

  1. 右键单击项目,然后单击属性。(或在项目上按 alt-enter)
  2. 在部署程序集下删除“src”。

您应该能够添加 src/main/java. 它还会自动将其添加到部署程序集。

警告:如果您添加了 src/test/java 请注意,它还会将其添加到部署程序集。一般来说,你不需要这个。你可以删除它。

于 2017-10-05T07:24:03.113 回答
1

这开始让我陷入一个用 Eclipse 修复故障的巨大兔子洞,但是我只是从 Eclipse 中删除了该项目并重新导入它来修复它。

于 2018-07-25T14:50:34.067 回答
1

有类似的问题。做了以下步骤,问题解决:

  1. 在eclipse中删除项目。
  2. 删除 .Project 文件和 . 设置文件夹。
  3. 再次将项目作为现有的 Maven 项目导入到 Eclipse。
于 2020-07-10T01:54:27.820 回答
0

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

于 2012-06-01T01:48:10.853 回答
0

STS IDE

这取决于告诉哪个文件夹“用作源文件夹”。在图片的结构中,如果对文件夹“目标”或“生成”说,他会得到“嵌套”错误。但是在 pom.xml 的“插件”部分中提到的最后一个“cxf”文件夹以及包结构的开始位置(如 .wsdl 文件所示),即 - 正确的文件夹“源”一个,则没有错误

于 2019-09-24T17:22:38.140 回答
-4

创建两个文件夹:final/src/存储源 java 代码,和 final/WebRoot/.

您不能将源代码和 webroot 放在一起。我想你可能误解了你的老师。

于 2012-05-31T17:30:14.127 回答