在Gradle WAR构建

时间:2018-04-17 13:32:27

标签: java spring gradle

过去,Web应用程序的静态资源始终位于src/main/webapp之下。

最近,Spring Initializr为我创建了一个新的项目布局,因此发现资源应该在src/main/resources/static之下。我认为这是新标准 由于此更改,项目现在也立即在IntelliJ下运行,对于Eclipse,我在build.gradle文件中进行了此修改:

project.webAppDirName = 'src/main/resources/static'

eclipse {
    wtp {
        component {
            contextPath = '/'
            deployName = 'myapp'
        }
        facet {
            //facet name: 'jst.web', version: '3.1'
            file {
                whenMerged {
                    facets.each { f ->
                        if (f.name == 'jst.web') {
                            f.version = '3.1'
                        }
                    }
                }
            }
        }
    }
}

现在我已经构建了一个WAR,并且必须意识到静态资源是双重的。

发生某种魔法(自动)。

Something将我的静态资源复制到WAR的根目录中,就像它们在webapp下时一样。在WEB-INF/classes/static

下也可以找到相同的资源

我假设静态资源位于WAR根目录的正确位置。 Gradle避免WEB-INF/classes/static下的资源的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

默认情况下,将src/main/resources中的内容复制到WEB-INF/classes中。设置project.webAppDirName会创建一个额外的sourceSet,该副本会复制到war文件(的根文件夹)中。

要将某些文件从默认复制操作中排除,您可以像这样从sourceSet中排除文件:

war {
    rootSpec.exclude('**/static/**')
}

在此处记录:

How to exclude src/main/resources files from the final WAR?
How to Exclude directory and its contents in gradle war
How can I exlude files from WAR when using WAR plugin against default or webAppDirName location
Wrong files added to WAR package using Gradle