在 Gradle 3.5 中替换 WAR 文件中的资源文件
Replace a resource file in a WAR file in Gradle 3.5
我浏览了整个互联网并找到了很多答案,但没有一个适合我。
我有
下的2个文件
src/main/resources/
cluster.xml
a/
cluster.xml
在我的 war 文件中我想要后者。
所以我尝试了:
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
模式运行应用程序 w/o 构建 war 文件。在这种情况下,文件 resources/cluster.xml
是从类路径中挑选出来的,应用程序就像魅力一样。
对于 war
任务,我想替换这个单个文件,而不破坏 bootRun
任务并使整个配置尽可能简单。
试试这个:
sourceSets.main.resources.exclude '**/cluster.xml'
war {
from( 'src/main/resources' ){
exclude 'cluster.xml'
include 'a/cluster.xml'
into 'WEB-INF/classes'
}
}
要仅修改 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"
}
}
}
与其依赖可能令人困惑的 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
加在一起。恕我直言,这比使用 exclude
要好得多
我浏览了整个互联网并找到了很多答案,但没有一个适合我。
我有
下的2个文件src/main/resources/
cluster.xml
a/
cluster.xml
在我的 war 文件中我想要后者。
所以我尝试了:
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
模式运行应用程序 w/o 构建 war 文件。在这种情况下,文件 resources/cluster.xml
是从类路径中挑选出来的,应用程序就像魅力一样。
对于 war
任务,我想替换这个单个文件,而不破坏 bootRun
任务并使整个配置尽可能简单。
试试这个:
sourceSets.main.resources.exclude '**/cluster.xml'
war {
from( 'src/main/resources' ){
exclude 'cluster.xml'
include 'a/cluster.xml'
into 'WEB-INF/classes'
}
}
要仅修改 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"
}
}
}
与其依赖可能令人困惑的 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
加在一起。恕我直言,这比使用 exclude