在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