我正在使用Apache Ant 1.8将Web应用程序部署到本地Tomcat服务器,并且当我在命令行运行“ant deploy”时,build.xml文件(如下所示)会产生所需的效果。
我的问题是,我注意到.war文件被放置在我期望的位置(deploy.dir在我的主目录的build.properties文件中定义),但它也意外地解压缩.war并提取了上下文本身进入同一目录。在下面的build.xml文件中配置了什么?
<target name='init'>
<property file='${user.home}/build.properties'/>
<property name='app.name' value='${ant.project.name}'/>
<property name='src.dir' location='src'/>
<property name='lib.dir' location='lib'/>
<property name='build.dir' location='build'/>
<property name='classes.dir' location='${build.dir}/classes'/>
<property name='dist.dir' location='${build.dir}/dist'/>
</target>
<target name='initdirs' depends='init'>
<mkdir dir='${classes.dir}'/>
<mkdir dir='${dist.dir}'/>
</target>
<target name='compile' depends='initdirs'>
<javac srcdir='${src.dir}/java' destdir='${classes.dir}'>
<!--
<classpath>
<fileset dir='${lib.dir}/development' includes='javaee.jar'/>
<fileset dir='${lib.dir}/production' includes='jr.jar'/>
</classpath>
-->
</javac>
</target>
<target name='war' depends='compile'>
<war destFile='${dist.dir}/${app.name}.war' webxml='${src.dir}/web/WEB-INF/web.xml'>
<classes dir='${classes.dir}'/>
<!--
<zipfileset dir='${lib.dir}/production' includes='jr.jar' prefix='WEB-INF/lib' />
-->
<fileset dir='${src.dir}/web' excludes='WEB-INF/web.xml' />
</war>
</target>
<target name='build' depends='war' description='compile and create the war' />
<target name='clean' depends='init' description='Use for a clean build'>
<delete dir='${build.dir}' />
</target>
<target name='ffbuild' depends='clean, build' description='clean and create the war'/>
<target name='deploy' depends='initdirs' description='copy the war file to the app server'>
<delete verbose='true' dir='${deploy.dir}/${app.name}'/>
<fail unless='deploy.dir' message='build.properties must exist in your home directory and define deploy.dir' />
<copy todir='${deploy.dir}' file='${dist.dir}/${app.name}.war'/>
</target>
答案 0 :(得分:12)
Tomcat有一个autodeploy文件夹,您放置的任何war文件都将自动解压缩并部署。您的ant文件只是通过调用tomcat-manager Web应用程序(预先打包到tomcat中)中的特殊URL将war文件复制到此目录中。
从这一点开始,一切都由tomcat核心自动处理,就像你手动将war文件复制到webapps目录一样。
你可以让ant为tomcat做一些特定的ant任务。特别是如果Tomcat服务器不在本地计算机上。 See this link for details
答案 1 :(得分:3)
您已在Tomcat安装中启用了自动部署。 This link详细介绍了自动部署,但简而言之,Tomcat会扫描某些目录以获取更新的web.xml和war文件。如果找到war文件,它会自动部署它。
更好的部署方式(特别是如果您需要部署到远程计算机)是使用Tomcat附带的Ant任务。 This page显示了如何设置构建文件,以便您可以从Ant部署和取消部署。页面很旧但信息仍然很好。这是我用来部署到Tomcat的build.xml的片段:
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
<classpath>
<path location="${build-jars}/catalina-ant.jar" />
</classpath>
</taskdef>
<target name="buildAndDeploy" depends="buildWar">
<deploy url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${target.name}"
update="true"
war="file:${basedir}/deploy/${target.name}.war" />
</target>
你可以在Tomcat的lib目录中找到catalina-ant.jar。
答案 2 :(得分:1)
我对Tomcat的Ant部署任务非常满意。有关信息,请查看Executing Manager Commands With Ant documentation。如果您决定走这条路,您应该能够在短时间内完成工作。
答案 3 :(得分:0)
可能您首先要复制dest dir
然后制作war
文件中的所有文件,而应将文件复制到某个temp
目录,创建{{1} } file,将其复制到war
,删除dest dir
目录。