【问题标题】:Create specific WAR file创建特定的WAR文件
【发布时间】:2013-10-08 00:32:03
【问题描述】:

在 ANT 脚本中,有没有办法将“环境”目录中的文件包含到不同的战争中?

我的文件系统树:

  • 环境
    • 开发
      • web.xml
      • log4j.properties
    • INT
      • web.xml
      • log4j.properties
  • 网页内容
    • WEB-INF
      • web.xml
      • log4j.properties

从 build.xml 中提取:

<target name="createForDEV">
  <delete file="environnement/DEV/${timeStampDay}/${warfile}.war" />
  <war destfile="environnement/DEV/${timeStampDay}/${warfile}.war" webxml="environnement/DEV/web.xml" update="true">
    <classes dir="build/classes" />
    <fileset dir="WebContent">
      <exclude name="WEB-INF/web.xml" />
      <exclude name="**/Thumbs.db" />
    </fileset>
  </war>
</target>
<target name="createForINT">
  <delete file="environnement/INT/${timeStampDay}/${warfile}.war" />
  <war destfile="environnement/INT/${timeStampDay}/${warfile}.war" webxml="environnement/INT/web.xml" update="true">
    <classes dir="build/classes" />
    <fileset dir="WebContent">
      <exclude name="WEB-INF/web.xml" />
      <exclude name="**/Thumbs.db" />
      <exclude name="**/test.jsp" />
    </fileset>
  </war>
</target>

我有两个配置文件:

  • 用于开发环境
  • 用于 INT 环境

当我制作 WAR 文件时,我想忽略一些文件并用“环境”目录中的其他特定文件替换它们?

  • createForDEV目标中进行WAR时,我想从环境/DEV中获取文件并替换相应的文件
  • createForINT目标中进行WAR时,我想从环境/INT中获取文件并替换相应的文件

【问题讨论】:

  • 您是否打算不对目标中的覆盖文件名进行硬编码?也就是说,DEVINT 中的任何文件都应该覆盖 WebContent 中的文件?
  • @barnesjd 即使我在每个目标中硬编码覆盖文件名,你有什么解决方案吗?
  • 如果你不想的话,你不必硬编码。我会尽快发布解决方案。

标签: ant


【解决方案1】:

这里的技巧是利用war 任务的duplicate 属性,并包含多个fileset 元素。 duplicate 的值 preserve 告诉它忽略重复条目。第一个fileset(来自DEVINT)中的文件将首先放入战争中。 WebContent 中的任何其他文件都将包含在第二个 fileset 中,但任何已包含在 DEVINT 中的文件都将被忽略。

<target name="createForDEV">
  <delete file="environnement/DEV/${timeStampDay}/${warfile}.war" />
  <war destfile="environnement/DEV/${timeStampDay}/${warfile}.war" webxml="environnement/DEV/web.xml" update="true" duplicate="preserve">
    <classes dir="build/classes" />
    <fileset dir="environnement/DEV">
      <exclude name="web.xml" />
    </fileset>
    <fileset dir="WebContent">
      <exclude name="WEB-INF/web.xml" />
      <exclude name="**/Thumbs.db" />
    </fileset>
  </war>
</target>
<target name="createForINT">
  <delete file="environnement/INT/${timeStampDay}/${warfile}.war" />
  <war destfile="environnement/INT/${timeStampDay}/${warfile}.war" webxml="environnement/INT/web.xml" update="true" duplicate="preserve">
    <classes dir="build/classes" />
    <fileset dir="environnement/INT">
      <exclude name="web.xml" />
    </fileset>
    <fileset dir="WebContent">
      <exclude name="WEB-INF/web.xml" />
      <exclude name="**/Thumbs.db" />
      <exclude name="**/test.jsp" />
    </fileset>
  </war>
</target>

【讨论】:

  • 感谢您的回答,但它不能按我的意愿工作。例如,log4j.properties 文件不在 WAR 中的正确目录中。它被复制到 ${warfile}.war/log4j.properties 中,我需要它在 ${warfile}.war/WEB-INF/log4j.properties
  • OK... 实际上,environnement/XXX 目录必须具有相同的树文件系统。例如,如果 log4j.properties 类似于 environnement/XXX/WEB-INF/log4j.properties,它就可以工作。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 2017-12-03
  • 2014-07-27
  • 2014-06-18
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多