Gradle multiproject:如何正确引用WEB-INF中的任何内容进行测试

时间:2016-09-01 00:06:29

标签: gradle build.gradle

我正在使用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尊重或使用:

  • 的src /主/ JAVA
  • 的src /主/资源
  • 的src /测试/ JAVA
  • 的src /测试/资源

但似乎并不是指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的位置和内容。

0 个答案:

没有答案