Eclipse 构建路径嵌套错误

我正在为我的类开发一个简单的 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'

enter image description here

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

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

当我排除 main/警告消失,但它不能解决问题。我会很感激任何建议。谢谢。

137917 次浏览

创建两个文件夹: final/src/用于存储源 Java 代码,以及 final/WebRoot/.

你不能把源代码和网络代码放在一起。我想你可能误解了你的老师。

您必须将构建输出所在的源和目标目录分开。同样需要注意的是,没有任何类文件可以最终出现在源目录中。这并不违背您的教授的建议——实际上,他正在推广专家标准的源代码结构。/src/main/java 和。/src/main/webapp.第二个应该保存强制性的 WEB-INF/web.xml 文件,但是您永远不会将实际的类放在那里。

您需要更改的是您的目标目录。我建议采用相同的标准,选择合适的名字。”。/目标」。所有构建的文件都将放在这里,打包后将得到一个正确的可部署构件。如果您以后迁移到使用 maven,它也将有助于以脚本化的、可重复的方式完成这项工作。

希望这能解决你的问题。

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

我甚至在创建一个新项目时也遇到了同样的问题。 我在 Eclipse 中创建 Java 项目,然后对其进行优化,然后进入 Java 构建路径属性,删除 src/并添加 src/main/javasrc/test/java。当我运行 Maven 更新时,它会给出嵌套路径错误。
然后我终于意识到-因为我以前没有看到过这个条目-当我优化它的时候,在 pom 文件中写了一行 <sourceDirectory>src</sourceDirectory>。取出来之后就解决了。

试试这个:

从图书馆选项卡:

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

Highlighting "Web App Libraries"

我想对这个帖子加上一个不太专业的回答。

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

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

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

修好

在构建路径中,您需要通过单击 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作为单独的源文件夹添加到构建路径中。

我有同样的问题和正确的答案上面不适合我。解决这个问题的方法是转到 Build Path->Configure Build Path,在 source 选项卡下,我删除了所有的源(它们只有一个源) ,并从那里重新配置了它们。最后,我从 eclipse 中删除了该项目,并再次导入了 maven 项目以清除错误。

接受的解决方案不适合我,但我做了一些深入的项目设置。

下面的解决方案至少在你使用动态网络项目的时候为我解决了这个问题:

  1. 右键单击项目 then properties。(或者在项目上输入 alt-enter)
  2. 在“部署程序集”下删除“ src”。

您应该能够添加 src/main/java。

注意: 如果您添加了 src/test/java 注意,它也会将其添加到 DeploymentAssembly。一般来说,你不需要这个。你可以摘下来了。

在我的案例中,我在 日蚀中有一个渐变自然项目,问题出在 build.gradle中,其中指定了这个 sourceSets:

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

这似乎与 智慧工作得很好,但似乎比 日蚀不喜欢巢 srcsrc/javasrc/resources。在 日蚀中,我必须把它改为:

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

这使我陷入了一个巨大的兔子洞,需要修复 Eclipse 的小故障,然而我只是从 Eclipse 中删除了这个项目,并重新导入它来修复它。

这里有一个简单的解决办法:

  1. 右键单击项目 > > 属性 > > 构建路径;
  2. 在“源”选项卡中,选择所有源文件夹;
  3. 把它们拿走;
  4. 右键单击 project,Maven > > Update the project。

STS IDE

这取决于要告诉“用作源文件夹”的文件夹是哪个。在图片的结构中,如果一个人对文件夹说“ target”或“ generated”,他就会得到“ nested”错误。但是在“ cxf”文件夹上,这是 pom.xml 的“插件”部分中提到的最后一个文件夹,也是包结构开始的地方(如。Wsdl 文件) ,也就是-正确的文件夹来做’源’一,那么就没有错误

遇到了类似的问题。按照以下步骤,问题解决了:

  1. 在 Eclipse 中删除项目。
  2. 删除。项目文件和。设置文件夹。
  3. 将 project 作为现有的 maven 项目再次导入以 Eclipse。