过去,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
下的资源的正确方法是什么?
答案 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