Eclipse构建路径嵌套错误


122

我正在为我的课程开发一个简单的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 /时,警告消失了,但是并不能解决问题。我将不胜感激任何建议。谢谢。

Answers:


309

即使我创建了一个新项目,我也遇到了同样的问题。我是在Eclipse中创建Java项目,然后对其进行Maven化,然后进入java构建路径属性src/src/main/java并删除和添加and src/test/java。当我运行Maven更新时,它通常会产生嵌套路径错误。
然后我终于意识到了-因为我之前没有看到该条目<sourceDirectory>src</sourceDirectory>-pom文件中有一行在我进行行进操作时写了一行。删除后已解决。


1
这只是众多随机技巧之一。没有解释原因。因此不太有用。
smwikipedia

4
我只是将pom条目重命名为scr / main / java,一切都很好。感谢您的帖子acheron55
Beezer

你把它放在那里了吗?或它来自哪里?
在线

23

我想对此线程发表非保守的答案。

由于版本控制和严格的目录结构原因,我无法遵循Acheron的答案(最好的答案)来完成与删除src/,添加src/main/javasrc/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其作为单独的源文件夹添加到构建路径。


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


3

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


3

就我而言,我在eclipse中有一个gradle nature项目,问题出在build.gradle,其中sourceSets指定了该位置:

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

这似乎与好作品的IntelliJ,但似乎比日食不喜欢窝srcsrc/javasrc/resources。在日食中,我必须将其更改为:

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

2

您必须将源文件和构建输出所在的目标目录分开。还需要注意的是,没有任何类文件可以在源目录中结束。这并不违反您教授的建议-实际上,他正在推广适用于./src/main/java和./src/main/webapp的Maven标准源代码结构。第二个应该举行例如。强制性的WEB-INF / web.xml文件,但您永远不会在其中放置实际的类。

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

希望能解决您的问题。


2

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

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

1

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

以下解决方案至少在您使用动态Web项目的情况下为我修复了该问题:

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

您应该能够添加src / main / java。它还会自动将其添加到Deployment Assembly。

警告:如果添加了src / test / java,请注意,它还将其添加到Deployment Assembly中。通常,您不需要此。您可以将其删除。


1

这开始使我陷入了使用Eclipse修复故障的巨大麻烦,但是我只是从Eclipse中删除了该项目,然后重新导入了该项目以进行修复。


0

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


0

STS IDE

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


0

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

  1. 在Eclipse中删除项目。
  2. 删除.Project文件和。设置文件夹。
  3. 再次将项目导入为现有的Maven项目以使其黯然失色。

-3

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

您不能将源和Webroot放在一起。我认为您可能会误解您的老师。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.