2010-05-26 146 views
0

我正在使用ant脚本生成war文件,它会生成war文件。请参阅下面的脚本Ant构建脚本

<target name="war" depends="build"> 
    <mkdir dir="${dist}" /> 
    <jar destfile="${dist}/${proj_name}.war" basedir="${build}" /> 
</target> 

如果它生成一个新的战争的文件,然后我想有一个属性来设置值“newupdates”否则我想知道“noupdates”

+1

似乎有一些代码在这里失踪,Gomathi。 – 2010-05-26 19:14:17

+0

完成我的回答。顺便说一句,你应该使用['war'](http://ant.apache.org/manual/CoreTasks/war.html)任务而不是'jar':'war'是'jar'的扩展。轻松处理WEB_INF目录 – tonio 2010-05-26 21:50:48

+1

@Banang。代码在那里,只是没有正确逃脱。我前一段时间抱怨说,没有编辑权限的人应该有简单的方法来查看问题来源。 – 2010-05-27 14:56:31

回答

1

的策略这是否可以使用UpToDate任务来设置属性。 只需在执行uptodate检查之后将war文件复制到war.bak,为下次运行做准备。

另一种策略(可能更好)是使用UpToDate任务来确定是否必须生成战争,设置属性,例如myuptodateproperty。然后调用你的战争生成目标,并确保它具有约束条件,以便在不需要时重新生成战争。

可以使用的东西中的线(未经测试的代码,可能需要一些工作):

<target name="war" depends="clean,fillbuildanddist,build"> 
    <mkdir dir="${dist}" /> 
    <uptodate targetfile="${dist}/${proj_name}.war" property="uptodatewar"> 
    <fileset dir="${build}" /> 
    </uptodate> 
    <antcall target="makewar" /> 
</target> 

<target name="makewar" unless="uptodatewar"> 
    <jar destfile="${dist}/${proj_name}.war" basedir="${build}" /> 
</target> 

有了这个,物业uptodatewar应设置为true只有在战争并不需要重建,因此在这种情况下只会调用jar任务。在依赖war目标的目标中,只有战争是新的时,才可以使用uptodatewar执行任务。

+0

这是gomathi,托尼奥,您能详细解释,以下是代码 <目标名称= “战争” 取决于= “干净,fillbuildanddist,打造”> \t \t \t \t <罐子destfile = “$ {DIST}/$ {PROJ_NAME}的.war” BASEDIR = “$ {构建}”/> \t 有时没有战争文件中生成,如果在{DIST war文件}文件夹,是uptodate之一。在那种情况下,我想拥有应该有“不合时宜”的财产。你可以给我任何代码片段更好的理解 – gomathi 2010-05-26 20:50:14

+0

更新了示例代码的答案 – tonio 2010-06-05 12:57:15