我有一个构建过程,以相当复杂的方式创建一个耳朵(多个EJB jar,几个战争,几个sars(特定于JBoss)。将它拼凑在一起的ant过程有点复杂。< / p>
不在ANT中重新创建ejb创建逻辑的最佳策略是什么,但仍然能够部署到应用程序服务器或用于QA和生产。
虽然我关注JBoss,但这个问题与支持爆炸式耳部部署的任何应用服务器都非常相关,而且更多的是关于ANT,如何避免两个不同的目标重建创建zip文件的逻辑与复制到一个目录。
答案 0 :(得分:5)
我发现对我们最有效的方法是在文件系统中以爆炸形式创建ZIP / EAR / WAR / JAR内容,然后作为最后一步zip / ear / war / jar来实现一份文件。
这允许我们进行后处理步骤,这些步骤只知道文件而不是zip文件条目,这通常要简单得多。如果您使用爆炸部署和在爆炸部署中获取已更改文件的服务器,则只需使用rsync即可更新服务器部署中实际更改的文件。
然后,您可以将建筑物放在一个目标中,并将其打包在另一个目标中,这样可以轻松完成这两个目标。
请参阅Alexander Pogrebnyak关于如何使用此解决方案处理清单的答案。
答案 1 :(得分:4)
这是对你对清单的评论的回复。
您应该使用<manifest>
任务(here is the link)来控制清单创建。
以下是我的构建文件中提供清单的摘录。
<copy toDir="${stage.dir}" flatten="true">
<fileset dir="${resources.src.dir}">
<include name="META-INF/MANIFEST.MF"/>
</fileset>
</copy>
<manifest
file="${stage.dir}/MANIFEST.MF"
mode="update"
>
<attribute name="Built-By" value="${builder.name}" />
</manifest>
<jar destfile="${project.jar.file}"
basedir="${classes.dir}"
manifest="${stage.dir}/MANIFEST.MF"
duplicate="fail"
whenmanifestonly="fail"
/>
注意<manifest>
任务mode
属性。您总是希望将其设置为update
,否则<jar>
任务将始终运行,因为清单始终是过时的。
答案 2 :(得分:3)
.ear文件是.zip文件。要部署爆炸版本,只需将内容解压缩到名为* .ear。
的文件夹中