JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
Spring-MVCの散歩道 > Spring Boot の小径 > 回り道 Mavenの小径 > ホットデプロイ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>       <!-- DTDスキーマ not found 警告対処 -->

<project name="Spring-MVC promenade" basedir="." default="usage"
        xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <!-- アプリケーション固有の設定は外部ファイルに追い出す -->
    <property file="build.properties" />

    <!-- build Base Path -->
    <property name="working.dir"            value="." />

    <!-- 環境変数の設定 -->
    <property name="encoding"                   value="UTF-8" />

    <!-- Maven による Deployコンテンツ一式格納 root パス-->
    <property name="package.dir"                value="./target/${app_name}"/>
    <!-- Maven による bild class パス-->
    <property name="build.dir"                  value="./target/classes"/>

    <!-- Tomcat WebApp root -->
    <property name="app.root"               value="${tomcat.home}/webapps"/>
    <!-- Tomcat アプリケーションコンテキストパス -->
    <property name="app.home"                   value="${app.root}/${app_name}/"/>
    <!-- Tomcat WEB-INF Path -->
    <property name="webinf.home"                value="${app.home}/WEB-INF"/>
    <!-- Tomcat Application Class Path -->
    <property name="class.dir"              value="${app.home}/WEB-INF/classes"/>
    <!-- Tomcat Application Library Path -->
    <property name="libs.dir"                   value="${app.home}/WEB-INF/lib"/>
    <!-- Application jarファイル名-->
    <property name="target.jar"                 value="${app_name}.jar"/>
    <!-- メッセージ・プロパティファイル名-->
    <property name="MessageResources"   value="MessageResources.properties"/>
    <property name="Log4JResources"     value="log4j2.xml"/>
    <!-- 例外メッセージ・プロパティファイル名-->
    <property name="ValidationMessages" value="ValidationMessages.properties"/>

    <!-- 以下は tomct reload時 NoClassDefFoundError: B2CConverter のエラーを回避するために必要 -->
    <property name="cpath" value="
        ${tomcat.home}/lib/catalina-ant.jar;
        ${tomcat.home}/lib/tomcat-util.jar;
        ${tomcat.home}/lib/tomcat-coyote.jar;
        "/>
    <!-- antコマンドの Usage (引数無しでantを実行した場合に表示される) -->
    <target name="usage">
        <echo message="----USAGE----"/>
        <echo message="***targets***"/>
        <echo message="update : git共有リポジトリから pull"/>
        <echo message="build  : ビルドを実施"/>
        <echo message="deploy : tomcat環境へデプロイを実施"/>
        <echo message="clean_deploy : tomcat環境のlibs配下をcleanした後にデプロイを実施"/>
        <echo message="reload : tomcatアプリケーションをリロード"/>
    </target>

    <!-- git MACRO -->
    <macrodef name = "git-command">
        <attribute name = "command" />
        <attribute name = "dir" default = "" />
        <element name = "args" optional = "true" />
        <sequential>
            <echo message = "git @{command}" />
            <exec executable = "git" dir = "@{dir}">
                <arg value = "@{command}" />
                <args/>
            </exec>
        </sequential>
    </macrodef>

    <!-- git repositoryからカレントにpull する -->
    <target name="update">
        <git-command command = "pull" dir = "${working.dir}" />
    </target>

    <!-- Maven Local  repository-->
    <artifact:localRepository id="localRepo" path="${maven.local.repo.dir}"/>

    <!-- Mavenビルド MACRO -->
    <macrodef name="mvn_build">
        <attribute name="dir" />
        <sequential>
            <artifact:mvn pom="@{dir}/pom.xml" fork="yes" failonerror="true">
                <localRepository refid="localRepo"/>
                <!-- /target配下を全てclean -->
                <arg value="clean"/>
                <!-- warを作る -->
                <arg value="package"/>
            </artifact:mvn>
        </sequential>
    </macrodef>

    <!-- Maven build タスク -->
    <target name="build" depends="update">
        <mvn_build dir="${working.dir}" />
    </target>

    <!-- Deploy タスク -->
    <target name="deploy" depends="build">
        <copy todir="${app.home}" preservelastmodified="true">
            <fileset dir="${package.dir}">
                <exclude name="META-INF/**/*.MF"/>
                <!-- classes配下のディレクトリは除外する⇒jarファイルで配置する -->
                <exclude name="WEB-INF/classes/jp/**/*"/>
                <exclude name="WEB-INF/classes/jp"/>
            </fileset>
        </copy>

        <!-- deploy環境にjar ファイルを作成する -->
        <jar basedir ="${build.dir}" jarfile ="${libs.dir}/${target.jar}"/>
    </target>

    <!-- libClean And Deploy タスク -->
    <target name="clean_deploy" depends="build">
        <!-- libs配下のjarファイルを削除する(バージョンアップ時などで旧libが残る) -->
        <delete>
            <fileset dir="${libs.dir}" includes="*.jar"/>
        </delete>
        <copy todir="${app.home}" preservelastmodified="true">
            <fileset dir="${package.dir}">
                <exclude name="META-INF/**/*.MF"/>
                <!-- classes配下のディレクトリは除外する⇒jarファイルで配置する -->
                <exclude name="WEB-INF/classes/jp/**/*"/>
                <exclude name="WEB-INF/classes/jp"/>
            </fileset>
        </copy>
        <!-- deploy環境にjar ファイルを作成する -->
        <jar basedir ="${build.dir}" jarfile ="${libs.dir}/${target.jar}"/>
    </target>

    <!-- TomcatApp再ロード タスク -->
    <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" classpath="${cpath}" />
    <target name="reload">
        <reload url="${tomcat_manager_url}"
            username="${tomcat_user}"
            password="${tomcat_passwd}"
            path="/${app_name}"/>
    </target>

    <!-- TomcatApp停止/開始 -->
    <taskdef name="stop" classpath="${cpath}" classname="org.apache.catalina.ant.StopTask"/>
    <taskdef name="start" classpath="${cpath}" classname="org.apache.catalina.ant.StartTask"/>
    <!-- TomcatApp停止 タスク -->
    <target name="stop">
        <stop url="${tomcat_manager_url}"
            username="${tomcat_user}"
            password="${tomcat_passwd}"
            path="/${app_name}"/>
    </target>

    <!-- TomcatApp起動 タスク -->
    <target name="start">
        <start url="${tomcat_manager_url}"
            username="${tomcat_user}"
            password="${tomcat_passwd}"
            path="/${app_name}"/>
    </target>
</project>