我正在使用Spring / Gradle多模块项目。
.war
文件并在Apache Tomcat
问题在于测试,适用于在Web环境中工作的模块。我有以下内容:
project(':web-27-controller') {
description 'Web - Controller & Rest'
dependencies {
compile project(':web-27-service-api')
compile project(':web-27-support')
testCompile project(':web-27-config')
testRuntime project(':web-27-config').sourceSets.test.output
testRuntime project(':web-27-repository-jdbc')
testRuntime project(':web-27-service-impl')
testCompile project(':web-27-web')
testRuntime project(':web-27-web').sourceSets.main.output
}
}
在该模块中,我完全了解@Controller
s
当我执行该特定模块的测试时,我得到:
Caused by: java.io.FileNotFoundException: ServletContext resource [/WEB-INF/tiles/definition/tiles-definitions.xml] cannot be resolved to URL because it does not exist
at org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:156)
我可以在其他 web-27-web
模块中看到/WEB-INF/tiles/definition/tiles-definitions.xml
文件。它当然位于webapp
目录中,请记住,当我创建.war
文件时,它在Apache Tomcat
我知道Gradle尊重或使用:
但似乎并不是指WEB-INF
位置
我有关于web-27-web
的以下内容(认为它不稳定,因为我试图让它工作)
project(':web-27-web') {
description 'Web (JSP, JS, CSS)'
apply plugin: 'war'
project.webAppDirName = 'WebContent'
dependencies {
compile fileTree(dir: "WebContent/WEB-INF/tiles/definition", include: '*.xml')
testCompile fileTree(dir: "WebContent/WEB-INF/tiles/definition", include: '*.xml')
testRuntime fileTree(dir: "WebContent/WEB-INF/tiles/definition", include: '*.xml')
exportedProjects.each{
if("$it"!=":web-27-web")
compile project("$it")
}
//Apache Tiles
['tiles-jsp',
'tiles-servlet'
].each {
runtime "org.apache.tiles:$it:$tilesVersion"
testCompile "org.apache.tiles:$it:$tilesVersion"
testRuntime "org.apache.tiles:$it:$tilesVersion"
}
//JSTL
compile "javax.servlet:jstl:$jstlVersion"
testRuntime "javax.servlet:jstl:$jstlVersion"
//Servlet API
providedCompile "javax.servlet:javax.servlet-api:$javaxServletApiVersion"
testRuntime "javax.servlet:javax.servlet-api:$javaxServletApiVersion"
}
war {
version=''
baseName = warBaseName
}
}
缺少什么或错了什么?
α:
当我使用(1)或(2)时
project(':web-27-web') {
description 'Web (JSP, JS, CSS)'
apply plugin: 'war'
webAppDirName = 'WebContent'//1
webAppDirName = 'weapp'//2
dependencies {
...
//JSTL
compile "javax.servlet:jstl:$jstlVersion"
//Servlet API
providedCompile "javax.servlet:javax.servlet-api:$javaxServletApiVersion"
}
...
当我将项目导出到.war
文件并将其部署在Tomcat中时,我确实知道resources
(应该位于所有.js,css文件中)不存在,WEB-INF
中的唯一内容是lib
目录。
我必须使用webAppDirName = 'src/main/webapp'
才能成功导出。
project(':web-27-web') {
description 'Web (JSP, JS, CSS)'
apply plugin: 'war'
webAppDirName = 'src/main/webapp'
dependencies {
compile fileTree(dir: "/WEB-INF/tiles/definition", include: '*.xml')
runtime fileTree(dir: "/WEB-INF/tiles/definition", include: '*.xml')
testCompile fileTree(dir: "/WEB-INF/tiles/definition", include: '*.xml')
testRuntime fileTree(dir: "/WEB-INF/tiles/definition", include: '*.xml')
exportedProjects.each{
if("$it"!=":web-27-web")
compile project("$it")
}
//JSTL
compile "javax.servlet:jstl:$jstlVersion"
//Servlet API
providedCompile "javax.servlet:javax.servlet-api:$javaxServletApiVersion"
}
但测试尚未检测或识别WEB-INF
的位置和内容。