Eclipse构建路径嵌套错误

时间:2012-05-31 17:08:24

标签: java eclipse tomcat servlets

我正在为我的班级开发一个简单的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"/> 

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

13 个答案:

答案 0 :(得分:287)

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

答案 1 :(得分:17)

我想对这个帖子提出一个非常少的答案。

由于版本控制和严格的目录结构原因,我无法按照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. 来源(标签)
  5. Exclusion Patterns

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

答案 2 :(得分: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"

突出显示&#34; Web App库&#34;:

Highlighting "Web App Libraries"

答案 3 :(得分:3)

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

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

这似乎适用于 intelliJ ,但似乎 eclipse 不像nest srcsrc/java,{{ 1}}。在 eclipse 中,我必须将其更改为:

src/resources

答案 4 :(得分:2)

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

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

希望能解决你的问题。

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

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

  1. 右键单击项目,然后单击属性。 (或在项目上输入alt)
  2. 在部署程序集中删除&#34; src&#34;。
  3. 你应该能够添加src / main / java。它还会自动将其添加到Deployment Assembly。

    警告:如果您添加了src / test / java注释,它还会将其添加到Deployment Assembly中。一般来说,你不需要这个。你可以删除它。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

STS IDE

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

答案 11 :(得分:0)

有类似的问题。是否按照以下步骤操作,问题已解决:

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

答案 12 :(得分:-3)

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

您无法将源和Webroot放在一起。我想你可能会误解你的老师。