在Gradle 3.5中将资源文件替换为WAR文件
我浏览了整个互联网,找到了很多答案,但这两个答案都不适合我 我有两个文件在下面在Gradle 3.5中将资源文件替换为WAR文件,gradle,war,Gradle,War,我浏览了整个互联网,找到了很多答案,但这两个答案都不适合我 我有两个文件在下面 src/main/resources/ cluster.xml a/ cluster.xml 在我的war文件中,我想要晚一点的 所以我试着: war { from( 'src/main/resources' ){ exclude 'cluster.xml' include 'a/cl
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的两个副本放入WEB-INF/classes/a,并将一个cluster.xml放入WEB-INF/classes
我也尝试过使用webInf{},但也没有成功
更新:
说清楚一点。我有一个Grails3.x/Springboot应用程序。它有默认的gradle任务引导运行,在开发模式下运行应用程序,不构建war文件。在本例中,文件resources/cluster.xml是从类路径中选取的,应用程序的工作方式类似于charm
对于war任务,我希望替换这一个文件,而不破坏bootRun任务,并尽可能简化整个配置。尝试以下方法:
sourceSets.main.resources.exclude '**/cluster.xml'
war {
from( 'src/main/resources' ){
exclude 'cluster.xml'
include 'a/cluster.xml'
into 'WEB-INF/classes'
}
}
试试这个:
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并对cluster.xml文件执行一些逻辑 您是否考虑过将多个文件树组合在一起,而不是依赖于可能令人困惑的exclude?我更喜欢将两个根添加在一起,而不是在单个根中进行排除和移动 乙二醇 一旦您分离到不同的目录,就可以在给定的情况下将所需的文件树添加到一起。IMHO这比使用exclude(排除)要好得多,而不是依赖exclude(排除),因为exclude可能会造成混乱,您是否考虑过将多个文件树组合在一起?我更喜欢将两个根添加在一起,而不是在单个根中进行排除和移动 乙二醇
一旦您分离到不同的目录,就可以在给定的情况下将所需的文件树添加到一起。我觉得这比使用排除要好得多我相信您的建议是添加两个名为a和b的附加源集。我想这取决于您需要a资源和b资源的时间/地点。使用src/x/resources约定不一定需要添加源代码集,因为编译任务等会带来开销。谁知道呢,您可能会全力以赴使用我的插件,您的建议似乎与各个源代码集的约定一致。确切地说,约定是一个强大的东西。如果我在src/main目录下看到'a'和'b'文件夹,我会怀疑这些是特定于味道/变体的文件,甚至没有看到构建文件。另一方面,src/main/resources/a/cluster.xml令人困惑。如果它只是资源,我可能会选择最初不使用额外的源集。将来,如果每个风格/变体都有额外的.java文件,那么它可以很容易地更改为源集,而无需更改目录结构。我相信您的建议是添加两个名为a和b的额外源集。我想这取决于您需要a资源和b资源的使用情况。使用src/x/resources约定不一定需要添加源代码集,因为编译任务等会带来开销。谁知道呢,您可能会全力以赴使用我的插件,您的建议似乎与各个源代码集的约定一致。确切地说,约定是一个强大的东西。如果我在src/main目录下看到'a'和'b'文件夹,我会怀疑这些是特定于味道/变体的文件,甚至没有看到构建文件。另一方面,src/main/resources/a/cluster.xml令人困惑。如果它只是资源,我可能会选择最初不使用额外的源集。将来,如果每个味道/变体都有额外的.java文件,它可以轻松地更改为源集,而无需更改目录结构。我是否应该将processResources放在war中?@injecteer Nope,它应该在war{}之外。这将配置processResources任务,有关它的更多信息,请单击此处:@injecteer尝试我的更新答案。它只会在复制文件时修改WAR的内容。我将尝试一下。你能简单解释一下rootSpec的意思吗?@injecteer当然。war任务是一个复制任务,它包含一个或多个相互完全隔离的复制规范。rootSpec是Gradle中可以改变现有copyspec行为的方法。我是否应该将processResources放在war中?@injecteer Nope,它应该在war{}之外。这将配置processResources任务,有关它的更多信息,请单击此处:@injecteer尝试我的更新答案。它只会在复制文件时修改WAR的内容。我将尝试一下。你能简单解释一下rootSpec的意思吗?@injecteer当然。war任务是一个复制任务,它包含一个或多个相互完全隔离的复制规范。rootSpec是Gradle中可以更改现有copySpec行为的方式。这将从所有任务中排除cluster.xml,这是我最不希望看到的 s将从所有任务中排除cluster.xml,这是我最不希望看到的
- 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