Как Apache Ant развертывает файл .war на Tomcat - PullRequest
7 голосов
/ 26 мая 2011

Я использую Apache Ant 1.8 для развертывания веб-приложения на локальном сервере Tomcat, и файл build.xml (ниже) дает желаемый эффект при запуске ant deploy в командной строке.

У меня вопрос: я заметил, что файл .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>

Ответы [ 4 ]

12 голосов
/ 26 мая 2011

Tomcat имеет папку автоматического развертывания, в которой любой размещенный вами файл войны будет автоматически распакован и развернут. Ваш файл ant просто копирует файл war в этот каталог, вызывая специальный URL-адрес в веб-приложении tomcat-manager (которое предварительно упаковано в tomcat).

С этого момента все автоматически обрабатывается ядром tomcat, просто если вы вручную скопировали файл war в каталог webapps.

Вы можете заставить муравья делать гораздо больше с некоторыми специфическими муравьиными заданиями для tomcat. Особенно, если сервер Tomcat находится не на локальной машине. Подробнее см. По этой ссылке .

3 голосов
/ 26 мая 2011

В вашей установке Tomcat включено автоматическое развертывание. Эта ссылка дает подробный обзор автоматического развертывания, но в двух словах, Tomcat сканирует определенные каталоги на предмет обновленных файлов web.xml и war.Если он находит файл войны, он развертывает его автоматически.

Лучший способ развертывания (особенно, если вам когда-либо понадобится развернуть на удаленном компьютере) - это использовать задачи Ant, поставляемые с Tomcat. На этой странице показано, как настроить файл сборки, чтобы вы могли развертывать и отменять развертывание из Ant.Страница старая, но информация все еще хорошая.Вот фрагмент файла build.xml, который я использую для развертывания в Tomcat:

<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>

Вы можете найти catalina-ant.jar в каталоге lib Tomcat.

1 голос
/ 26 мая 2011

Мне очень повезло с задачами Tomcat Ant для развертывания. Для получения дополнительной информации ознакомьтесь с документацией Выполнение команд диспетчера с Ant * Если вы решите пойти по этому пути, вы сможете запустить его в короткие сроки.

0 голосов
/ 26 мая 2011

Возможно, вы сначала копируете все свои файлы в свой dest dir, а затем создаете war файл, вместо этого вам следует скопировать свои файлы в какой-то каталог temp, создать файл war, скопировать его в dest dir, удалить temp каталог.

...