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

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■あぜ道 Eclipseの小技
git共有リポジトリからデプロイ
前回までは、Gitリモートリポジトリまでのプロジェクトの管理について説明しました。
Gitによるソース管理の元、プログラムも無事完成した暁には、
後は、これを運用環境にリリースする
いわゆるデプロイ作業という話の流れになります。
苦労して完成したアプリケーションを、世間に公開するための最終作業です。
Eclipseの小技という意味では、もうこれはEclipseの作業とは関係ないのですが、
話の流れ上、説明しておきたいと思います。
リリースのやり方にも人それぞれ色々とこだわりがあり、
人や環境によって、その手順や方法も異なり、これが絶対的正論という方法はありません。

ここではあくまで一例として説明しますので、参考にしてみてください。

・1)デプロイ先の環境
  LinuxOSのサーバーを前提とします。
   $JAVA_HOME : /usr/local/jdk とします。
   $TOMCAT_HOME:/usr/local/tomcat とします。
   $DB_HOME:/usr/local/pgsql とします。(PostgreSQLの場合)
   $ANT_HOME:/usr/local/ant とします。

・2)ビルドパス(作業ディレクトリ)
  Git共有リポジトリからインポートするための作業ディレクトリ
  ここで、Git共有リポジトリからインポートしたJavaをビルドします。
  Git作業ディレクトリは、/home/user/git とします。

・3)デプロイ先(公開用ディレクトリ)
  ビルドしたプログラムを、リリースするディレクトリ
  /home/user/public_web/jLabo とします。

  これをTomcatと連携するために
  [root@ews001 ~]# cd /usr/local/tomcat/webapps/
  [root@ews001 webapps]# ln -s jLabo /home/user/public_web/jLabo
  [root@ews001 webapps]# ls -l jLabo
          jLabo -> /home/user/public_web/jLabo
  で、シンボリックリンクしておきます。

・4)pom.xmlの追加作業
  デプロイ作業時のビルドで必要になるGti共有リポジトリ情報を、pom.xmlに追記する必要があります。
  本編 「■SpringMVC の小径 1-3)pom.xmlの編集」で説明されている
  pom.xml の <properties> ブロックの上あたりに、以下を追加しておいてください。
  <!-- mvn scm:update (git pullを実施)-->
  <scm>
   <connection>scm:git:ssh://user@hostname:22Gtt共有リポジトリパス</connection>
  </scm>

  user:Git共有リポジトリがあるサーバーのログインアカウントです。
  hostname:Git共有リポジトリがあるサーバー名(or ドメイン名)です。
  Gtt共有リポジトリパス:今回の例でいうと、「/home/pub/git/jLabo.git」です。

以上を決定したうえで、ここから具体的なデプロイ作業の説明です。

■共有リポジトリからのインポート
 Git共有リポジトリから作業ディレクトリにプロジェクトをインポートします。
  作業ディレクトリに移動します。
   [user@ews001 ~]$ cd git
  共有リポジトリからプロジェクトをインポートします。
   [user@ews001 git]$ git clone ssh://user@arimodoki.dip.jp:22/home/pub/git/jLabo.git
  作業ディレクトリ生成。
   [user@ews001 git]$ ll
          jLabo  ⇒ jLabo が作成されている。
   [user@ews001 git]$ cd jLabo
   [user@ews001 jLabo]$
    以降は、このディレクトリ上での作業となります。

■プロジェクトのビルド&デプロイ
 Mavenプロジェクトの場合のビルド&デプロイ手順として、ネットを検索すると
 mvnコマンドを使った方法がよく紹介されています。
 具体例としては、
  1)tomcatを一旦停止する。
  2)mvn scm:update  git pull を実施する。
  3)mvn compile   Javaをビルドする。
  4)mvn package   リリース対象のwarファイルを構築する。

  tomcat7-maven-pluginを使って、
  5)mvn tomcat7:undeploy Tomcat上の公開ディレクトリをundeploy(ディレクトリを削除)。
  6)mvn tomcat7:deploy   $TOMCAT_HOME/webapps に、4)で作成したwarファイルを設置する。
   ※)deploy コマンドは、すでにディレクトリがあるとエラーとなるので、undeployしてから実施する。
   ※)tomcat7-maven-pluginには、「redeploy」 が無くなりました。
  7)tomcatを再起動する。

という流れで、アプリケーションがリリースされる手順です。

なーんかめんどくさいなぁ。
ひょっとしたら、mvn でとってもエレガントな手順(スクリプトとか)があるのかもしれませんが、
いろいろ調べても、エレガントな美女にはいまだ出会った事がありません。
それで、以下個人的なフラストレーションから始まった解決への道のりです。
・一)リリース手順が、最低7工程も必要。⇒ 覚えきれない(馬鹿?)
・二)リリース手順ミスやらかしそう。⇒(やっぱ馬鹿?)
・三)リリース先のディレクトリには、画像フォルダなどをシンボリックリンクすんだけど
  5)の手順で、ぜーんぶ削除されてしまう(しかも、ご丁寧にもシンボリックリンク先まで!)
  ⇒これで実際、かなり痛い目にあったことがある。
・四)上の三)の理由を含めて、個人的には、あまりwarを展開したくない。
  ⇒jar と、あとは個別のコンテンツでいいじゃん。
・五)やっぱし、使い慣れた ant でなんとかならんかのぅ。。。。。

で、色々試行錯誤してたどり着いたのが、maven-ant-tasksプラグインというやつ。
これが何かと言うと、長いことant使ってるので、できればこのままantと添い遂げたいんだけど
antは残念なことに mvn コマンドをサポートしていない。
別れようかどうしようか悩んだけど、antは頑張ってmaven-ant-tasksプラグインという
新しいプラグインを生んでくれたので、なんとか別れずに済みました。
つまり、antの枯れた古臭い手順に、mvnの新しい機能が追加されて
両方のいいとこだけを利用してしまおうという理屈。
antについては、もうすでにネット上では語りつくされているはずなので、
ここでは改めて説明しません。
必要な方は、公式サイトTHE APACHE ANT PROJECTから
バイナリ拾ってセットアップしてください。
maven-ant-tasksプラグインは、雲の上の楽園 にjarファイルが陳列されているので
ここから拾って、antのセットアップ先、$ANT_HOME/lib に配置してください。

で、maven-ant-tasksプラグインに気が付いたまではよかったんですが、
これをまともに動くようにするのにだいぶ一苦労しました。
説明するのにも一苦労しそうなので、以下、
このjLaboで実際に使用しているbuild.xmlを載せますので、もし使いたい人は自由に使ってください。
プロジェクト固有の部分が数カ所ありますが、ほとんど共通的に使えると思います。
配置場所は、Eclipseプロジェクトの直下 pom.xml と同じ場所です。

話の順序が逆転してしまいますが、このbuild.xmlを先に作って、
「■共有リポジトリからのインポート」を行う前に、共有リポジトリに反映(プッシュ)しておくと、
「■共有リポジトリからのインポート」で、作業ディレクトリにインポートされるので、
2度手間にならずに済みます。
一つ書き忘れました。
このスクリプトでは、Tomcatのリロードコマンドがありますが、
これを使うためには、$TOMCAT_HOME/conf/tomcat-users.xml に
<role rolename="manager-script"/>
<user username="tomcat_user" password="tomcat_password" roles="manager-script"/>
の設定が必要になります。詳しいことは自分で調べてね!。

これを実際使う場合は、ant と打てば USAGE が表示されるので、あとは、中をよく見てもらえればわかると思います。
1) ant update:Git共有リポジトリから最新をpullします。
2) ant build :1)を実施した後、javaのコンパイルを実施します。
3) ant deploy:1)、2)を実施した後、リリース環境にデプロイを実施します。(前回から変更されたものだけ)
4) ant reload:1)、2)、3)を実施した後、Tomcatのリロードを実施します。


要するに、「ant reload」というコマンドを一つだけ覚えておけばあとは、ant/mvnが全部やってくれるってこと!
これで、馬鹿なオイラでも なんくるないさぁ~!!

 

※)2020/Jan/23 Maven Central Repositoryの罠
Maven Central Repositoryを覗いていたら
Spring Frameworkがバージョンアップしていたので
早速、pom.xml を修正して、アップデートしようとしたところ
Linuxサーバー側のビルドで

[artifact:mvn] Downloading: http://repo1.maven.org/maven2/.....
  :
  :
[artifact:mvn] [INFO]
[artifact:mvn] [ERROR] BUILD ERROR
[artifact:mvn] [INFO]
的なエラーが出て、ビルドできなくなってしまった。

はて? 調査したところ、
どうやら、2020年1月15日 から Maven の Central Repository URL が変更になったらしい。

解決策は、■SpringMVC の小径「1-3)pom.xmlの編集」
のトピックに残しておきました。