AntからTomcatを起動/終了する

  • 投稿日:
  • by
  • カテゴリ:

Antでビルド、デプロイ、Selenium、Coberture(JMeterも予定)を全自動で実施する実験をしている。

CobertureがTomcatを終了させないとカバレッジ測定結果ファイルを吐き出さないので、AntからTomcatを終了させる必要があった。ということは、全自動にするにはTomcatの開始も必要。

WebAPでlog4jを使ってたりするので、そのあたりでWebAP起動に失敗したりして。

Javaすら初心者なのでいろいろと苦労したが、動いた!!っつーことで、build.xmlのTomcat起動/終了部分を晒すよ。

<target name="tomcat-start">
<!-- jarだとなんでかダメ orz
    <java jar="${tomcat}/bin/bootstrap.jar" fork="true">
-->
    <java classname="org.apache.catalina.startup.Bootstrap" fork="true" spawn="true">
    <jvmarg value="-Dcatalina.home=${tomcat}" />
    <jvmarg value="-Dcatalina.base=${tomcat}" />
    <jvmarg value="-Djava.endorsed.dirs=${tomcat}¥endorsed"/>
    <jvmarg value="-Djava.io.tmpdir=${tomcat}¥temp"/>
    <jvmarg value="-Dfile.encoding=UTF-8"/>
    <jvmarg value="-Dnet.sourceforge.cobertura.datafile=D:¥(Coberturaの結果ファイル保存パス)¥cobertura.ser"/>

    <classpath location="(log4j.xmlのパス)" />
    <classpath>
      <fileset dir="${tomcat}">
        <include name="bin/bootstrap.jar" />
      </fileset>
    </classpath>
    <arg line="start"/>
  </java>
  <echo>tomcat started!!</echo>
</target>

<target name="tomcat-stop">
  <java jar="${tomcat}/bin/bootstrap.jar" fork="true">
    <jvmarg value="-Dcatalina.home=${tomcat}"/>
    <arg line="stop"/>
  </java>
  <waitfor maxwait="1" maxwaitunit="minute" checkevery="100">
    <not>
      <socket server="localhost" port="8080"/>
    </not>
  </waitfor>
  <echo>tomcat finished!!</echo>
</target>

EclipseからTomcatを起動したときはちゃんとWebAPが動くのに、Antから起動したTomcatでは動かなかったのはlog4j.xmlが読めてなかっただけだったのだが、MSが公開している「Process Explorer」ってフリーソフトでコマンドライン引数まで調べられて、コレのおかげでAntでも動かすことが出来るようになったのだ。