如何根据个人资料将文件复制到我的 WAR?

How do I copy a file into my WAR based on profile?

我在 Mac Yosemite 上使用 Gradle 2.7。我有以下文件:

src/main/environment/dev/context.xml
src/main/environment/qa/context.xml
src/main/environment/prod/context.xml

我想要的是,如果我 运行 一个构建 gradle -Pqa build,上面适当的 context.xml 文件被复制到我的 WAR(到 WEB-INF/classes 目录很好)。如何使用 gradle 进行设置?

您必须使用环境变量来执行此操作。将系统属性放在一个文件中。在 build.gradle 中阅读它们,并在此基础上将 context.xml 包含到 war 中。

解决问题的方法有很多种。您可以在构建 war 文件时配置 sourceSetsincludeexclude 特定资源。您还可以使用单个 context.xml 并使用 ReplaceTokens 过滤器执行资源过滤。

我选择了sourceSets:

apply plugin: 'war'

ext.env = project.hasProperty('env') ? project.env : 'dev'

sourceSets {
   main {
      resources {
         srcDir "src/main/environment/$env"
      }
   }
}

诀窍是 include/process 只有 env 被传递。如果没有传递 env,将选择 dev 进行进一步处理。看看 demo.