Hello Gradle developers
- I am working with a Spring/Gradle multi module project.
- For some modules, I am able to test them in isolation. I mean, test just a specific module. And them pass
- I am able to create a
.war
file and work in peace in Apache Tomcat
The problem is about testing and is for the module working in a web environment. I have the following:
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
}
}
When I execute that test for that specific module, I get:
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)
Well I can see in the other module web-27-web
the /WEB-INF/tiles/definition/tiles-definitions.xml
file. It of course within the webapp
directory and remember, when I create the .war
file, it works fine in Apache Tomcat
I know that Gradle respects or uses:
src/main/java
src/main/resources
src/test/java
src/test/resources
But seems that is not referring to the WEB-INF
location
I have the following about web-27-web
(consider it unstable because I have trying to get this working)
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
}
}
What is missing or wrong?.
Thanks in advanced.