我正在为我的班级开发一个简单的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"/>
当我排除主要/警告消失,但它不能解决问题。我很感激任何建议。谢谢。
即使我创建了一个新项目,我也遇到了同样的问题。我在Eclipse中创建Java项目,然后对其进行mavenize,然后进入java构建路径属性,删除src/
并添加src/main/java
和src/test/java
。当我运行Maven更新时,它曾用于提供嵌套路径错误。
然后我终于意识到 - 因为我之前没有看过那个条目 - 当我对它进行mavenize时,pom文件中有一个<sourceDirectory>src</sourceDirectory>
行。删除它后解决了。
这是一个简单的解决方案:
制作两个文件夹:src/resources
来存储源java代码,以及sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
。
您不能将源和Webroot放在一起。我想你可能会误解你的老师。
我想对这个帖子提出一个非常少的回答。
由于版本控制和严格的目录结构原因,我无法遵循Acheron的答案(最佳答案)做类似于删除src/
并将src/main/java
和src/test/java
添加到构建路径。
实际上我已经和这个嵌套的构建路径问题进行了几个星期的斗争。错误消息中暗示了问题的答案:
To enable the nesting exclude 'main/' from 'final/src'
固定
在你的构建路径中,你需要通过点击qazxsw poi然后点击qazxsw poi来编辑你的qazxsw poi:
Inclusion and Exclusion Patterns
在那里你可以添加Excluded: (None)
作为Edit...
。然后它应该允许您将添加到构建路径作为单独的源文件夹。
试试这个:
从库选项卡:
main/webapp/WEB-INF/classes
删除您的Web应用程序库:
Exclusion Pattern
将它们添加回来:
main/webapp/WEB-INF/classes
突出显示“Web App库”:
在我的情况下,我在日食中有一个gradle自然项目,问题出在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"
这似乎适用于intelliJ,但似乎比eclipse不喜欢巢build.gradle
,sourceSets
,sourceSets {
main {
java {
srcDir 'src'
}
}
}
。在eclipse中我必须将它改为:
src
您必须将源和构建输出所在的目标目录分开。同样重要的是要注意,任何类文件都不能在源目录中结束。这并不违反教授的建议 - 实际上他正在推广./src/main/java和./src/main/webapp的maven标准源结构。第二个应该举行例如。必须的WEB-INF / web.xml文件,但你永远不会把实际的类放在那里。
您需要更改的是目标目录。我建议使用相同的标准并为此选择名称“./target”。所有构建的文件都将放在此处,将其打包将产生正确的可部署工件。如果您稍后迁移到使用maven,它还将以脚本化,可重复的方式帮助您实现这一目标。
希望能解决你的问题。
我有同样的问题,上面的正确答案对我不起作用。我做的解决方法是去src/java
,在源选项卡下我删除了所有源(只有一个源)并从那里重新配置它们。我最终从eclipse中删除了项目并再次导入maven项目以清除错误。
接受的解决方案对我不起作用,但我对项目设置进行了一些挖掘。
以下解决方案至少在我使用动态Web项目时为我修复了它:
你应该能够添加src / main / java。它还会自动将其添加到Deployment Assembly。
警告:如果您添加了src / test / java注释,它还会将其添加到Deployment Assembly。通常,您不需要这个。你可以删除它。
要使Eclipse编译器正常工作,您需要从源路径中删除final / src并添加final / src / main / java。这也可以解决您的问题,因为现在构建目录不在Java源文件夹中。
这开始让我陷入了一个用Eclipse修复故障的巨大漏洞,但是我刚刚从Eclipse中删除了该项目并重新导入它来修复它。