我扫描了整个互联网并找到了很多答案,但都没有对我有效。
我有
下的2个文件src/main/resources/
cluster.xml
a/
cluster.xml
在我的战争文件中,我希望拥有后者。
所以我试过了:
war {
from( 'src/main/resources' ){
exclude 'cluster.xml'
include 'a/cluster.xml'
into 'WEB-INF/classes'
}
}
它将a/cluster.xml
的2份副本放入WEB-INF/classes/a
,将cluster.xml
复制到WEB-INF/classes
。
我也尝试使用webInf{}
但也没有成功。
更新:
要清楚一点。我有一个Grails 3.x / Springboot应用程序。它具有默认的gradle任务bootRun
,它以development
模式运行应用程序,无需构建war文件。在这种情况下,文件resources/cluster.xml
从类路径中选取,应用程序就像魅力一样。
对于war
任务,我想替换这个单个文件,而不会破坏bootRun
任务并保持整个配置尽可能简单。
答案 0 :(得分:2)
试试这个:
sourceSets.main.resources.exclude '**/cluster.xml'
war {
from( 'src/main/resources' ){
exclude 'cluster.xml'
include 'a/cluster.xml'
into 'WEB-INF/classes'
}
}
答案 1 :(得分:2)
要仅修改WAR,您需要访问rootSpec
并对cluster.xml
文件执行一些逻辑。
war {
rootSpec.includeEmptyDirs = false
rootSpec.filesMatching('**/cluster.xml') { details ->
if (details.sourcePath == "cluster.xml") {
details.exclude()
}
if (details.sourcePath == "a/cluster.xml") {
details.path = "WEB-INF/classes/cluster.xml"
}
}
}
答案 2 :(得分:1)
您考虑过将多个exclude
组合在一起,而不是依赖FileTrees
这可能会造成混淆吗?我更喜欢在一个根中添加两个根而不是黑客排除和移动
例如
- src/main/resources - Common stuff goes here
- src/a/resources/cluster.xml - Version A of cluster.xml
- src/b/resources/cluster.xml - Version B of cluster.xml
一旦您分成不同的目录,就可以将给定情况下所需的FileTrees
加在一起。恕我直言,这比使用排除