Java 如何在带有Buildr的.war包中有条件地包含两个文件中的一个?

Java 如何在带有Buildr的.war包中有条件地包含两个文件中的一个?,java,war,buildr,Java,War,Buildr,我们使用Buildr将应用程序打包为文件。为了进一步简化自动化部署过程,我想有条件地选择这两个文件中的一个(从目录src/main/resources) 数据库hsql.properties 数据库postgres.properties …并将其包含在生成的.war中,名称为database.properties。(在战争中的同一个地方,即WEB-INF/classes/,来自src/main/resources的文件现在在这里结束。) 有什么简单的方法吗?任何方法都可以——例如,参数化“包

我们使用Buildr将应用程序打包为文件。为了进一步简化自动化部署过程,我想有条件地选择这两个文件中的一个(从目录
src/main/resources

  • 数据库hsql.properties
  • 数据库postgres.properties
…并将其包含在生成的.war中,名称为
database.properties
。(在战争中的同一个地方,即
WEB-INF/classes/
,来自
src/main/resources
的文件现在在这里结束。)

有什么简单的方法吗?任何方法都可以——例如,参数化“包”(不知何故)或定义两个不同的任务/目标(我不确定术语),如“包hsql”和“包pgsql”——只要有效且足够简单

构建文件的相关位

load 'dependencies' 
require 'buildr/hibernate'

desc "..."
define "foo" do

  project.version = VERSION_NUMBER
  project.group = GROUP
  manifest["Implementation-Vendor"] = COPYRIGHT
  compile.with WICKET,GUAVA,GSON, ... [many more libs]
  test.with MOCKITO
  resources

  test.compile.with SERVLET,_('src/main/webapp'),_('src/main/resources')
  package(:war).with(:libs=> [WICKET,GUAVA,GSON, ... ])

end
额外问题:如何在这两种情况下分别执行任意shell命令(我会使用涉及
>
sed
)来更改另一个配置文件?(我还想从另一个文件向
applicationContext.xml
中“注入”一些db设置;这比在VCS中保留该文件的两个副本(内容基本相同)更可取。)


对不起,如果这是太基本;我是Buildr的新手,对Ruby也不太了解。(是的,使用当前团队成员都不精通的工具不是最佳情况……)如果有什么需要澄清的,请指出

参数化buildr构建的常用方法是使用环境变量。例如,您可能会将构建设计为这样执行:

$ buildr package DATABASE=postgres
在构建文件中,您可能有:

ENV['DATABASE'] ||= 'hsql' # this line makes the default 'hsql'

define "foo" do
  # the rest of the definition

  resources.enhance do
    cp _(:source, :main, :resources, "database-#{ENV['DATABASE']}.properties"), _(:target, :resources, "database.properties")
  end
end
这是最简单的解决办法;你可以考虑的一个缺点是它会复制两个代码>数据库-*.Frase文件,除了<代码>数据库。如果这是一个问题,那么可以以更复杂的代价来解决它

额外答案:您可以使用
系统
执行任意shell命令。例如,以次级销售为代价,我可以实现上述功能:

resources.enhance do
  system("cp '#{_(:source, :main, :resources, "database-#{ENV['DATABASE']}.properties")}' '#{_(:target, :resources, "database.properties")}'")
end

如果您想将属性注入到配置文件中,您可能需要查看Buildr的机制。

太好了,非常感谢!我使用“cp”方法使其工作。(现在我有点赶时间,但稍后奖金案例(applicationContext.xml)真的应该清理一下,也许可以使用您提到的过滤机制…)