eclipse、maven、github

とりあえず一段落ということでこれまで作ったファイルをeclipseのプロジェクトとして、mavenでwarファイルを作成できるようにし、githubに登録しました。

Apache Mavenを使う

javaソースコードはそのままでは実行できないため、コンパイルという作業が必要です。

ソフトウエアの規模が大きくなり、ソースコードの数が増えてくるとすべてのソースコードをコンパイルしていたのでは時間がかかりすぎるという問題があります。

かといって、編集を行ったソースコードだけを選んでコンパイルするというのも、人手でやっていると見落としが発生する可能性があり、現実的ではありません。

このため、自動的に更新されたソースコードを抽出して選択的にコンパイルするビルドツールというものが登場してきました。

今回使用したapache mavenもビルドツールの一つで、定義ファイルを作っておくと必要なライブラリを自動的にダウンロードしてくれるといった機能も持っています。

mavenを使用するにはpom.xmlというファイルを作成する必要があります。

pom.xmlの作成方法はネット上にいろいろ出ているので、それを参考にして以下のようなファイルを作成しました。

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>standings</groupId>

  <artifactId>standings</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

  <dependencies>

    <dependency>

      <groupId>jakarta.servlet</groupId>

      <artifactId>jakarta.servlet-api</artifactId>

      <version>5.0.0</version>

      <scope>provided</scope>

    </dependency>

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>8.0.28</version>

    </dependency>

  </dependencies>

  <build>

    <finalName>standings</finalName>

    <sourceDirectory>WEB-INF/src</sourceDirectory>

    <plugins>

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.8.1</version>

        <configuration>

          <release>17</release>

        </configuration>

      </plugin>

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-war-plugin</artifactId>

        <version>3.3.2</version>

        <configuration>

          <webXml>src/main/web.xml</webXml>

        </configuration>

      </plugin>

    </plugins>

  </build>

</project>

これをざっくりと説明しておきます。

まず、先頭の<project ...>ですが、pom.xmlファイルのお約束といったものですので、このまま書くだけです。

次の<modelVersion>4.0.0</modelVersion>もお約束でこの通り書かなければいけないものです。

<groupId>...</groupId>と<artifactId>...</artifactId>はビルドするプロジェクトの名前を指定するものです。

groupIdはプロジェクトグループの名前で、多くの場合プロジェクトを作成、管理している組織のドメイン名を逆順に記述したものにプロジェクトグループの名前を付けるようです。

例えば、このサイト (bewise.jp) の研究用プロジェクト群 (studies) ということで以下のような名前を付けます。

<groupId>jp.bewise.studies</groupId>

artifactIdはプロジェクトグループ内で決めたプロジェクト名になります。

今回はとりあえずでgroupId、artifactIdともにstandingsとしています。

<version>...</version>はプロジェクトで作成されるシステムのバージョン番号です。

これも適当につけるのですが、何となく上の例に書いているようなn.n.nの3階層にハイフンで備考的な説明を入れるのが普通のようです。

特に指定を行わない場合、artifactIdにversionをつなげたファイル名で成果物が作られる場合があるようです。

<packaging>war</packaging>はwarファイルの作成を指示しています。

warファイルはWebアプリケーションを一つにまとめてApache TomcatなどのWebコンテナに一括で配備できるファイル形式で、Webアプリケーションが複数のディレクトリに分散したファイルで構成されているため、一括して転送、配備が可能なファイル形式を用意しているようです。

次の<dependencies>...<dependencies>はプロジェクトのコンパイル、実行に必要なファイルを指定するもので、javaの実行環境に含まれないライブラリ (jarファイル)などを指定します。

今回はservletのコンパイルと実行に必要なjakarta servletと実行時に必要となるMySQL Connector/Jをdependencyとして指定しています。

mavenでのdependencyの指定方法はMVN Repositoryで検索することができます (Apache Mavenの公式サービスではないのですけど)。

<build>...</build>にコンパイルとwarファイルの作成に必要な設定を記述します。

<finalName>...</finalName>は成果物の名前、具体的にはwarファイルの名前で、warファイルを配備したときにはこの名前でディレクトリが作成されます。

上の例では<finalName>standings</finalName>と指定しているので、warファイルはstandings.warという名前でつくられ、このファイルをtomcatで配備するとhttp://localhost:8080/standings/...というURLでアクセスできるようになります。

<sourceDirectory>...</sourceDirectory>はjavaソースファイルのあるフォルダをプロジェクトルートからの相対パスで記述します。

ソースファイル自体はここで指定されたフォルダの下にあるパッケージディレクトリ以下に配置されていますが、パッケージディレクトリをここに記載する必要はありません。

<plugins>...</plugins>にはビルドに使用するmavenプラグインの情報を記述します。

通常は上に挙げたmaven-compiler-pluginとmaven-war-pluginの2個のpluginをMVN Repositoryで検索して設定すればいいと思います。

ここで一つ注意事項があります。maven-war-pluginを指定するplugin要素のなかにconfiguration要素があり、その下に<webXml>...</webXml>という記述があります。

これはweb.xmlのファイルを指定するもので、プロジェクトルートからの相対パス名でファイル名を含めて指定する必要があります。

たぶん省略時既定値があるのだと思いますが、とりあえず指定しておくのが間違いないと思います。

以上でpom.xmlはできました。

ディレクトリ構成の変更

これまではWebアプリケーションフォルダに配置するイメージそのままでディレクトリを作っていました。

簡単に示すと以下のような感じです。

standings (アプリケーションルート)
+ WEB-INF
+ + src (javaソースファイルディレクトリ)

+ + + standings (パッケージディレクトリ)

+ + + + AddMatch.java (javaソースファイル)

+ + + + DuplicatedMatchException.java (javaソースファイル)

+ + + + ... (以下省略)

+ + classes (javaクラスファイルディレクトリ)

+ + + AddMatch.class (javaクラスファイル)

+ + + DuplicatedMatchException.class (javaクラスファイル)

+ + + ... (以下省略)

+ + lib (外部クラスライブラリファイルディレクトリ)

+ + + mysql-connector-java-8.0.28.jar (MySQL Connector/Jクラスライブラリファイル)

+ + web.xml (Webアプリケーション定義ファイル)

+ add_match.jsp (JSPファイル)

+ duplicated_params.jsp (JSPファイル)

+ ... (以下省略)

簡単に説明するとHTMLファイルやJSPファイルなどはアプリケーションルートディレクトリ直下に、web.xmlファイルはWEB-INFディレクトリ直下に、JavaソースファイルをコンパイルしたクラスファイルはWEB-INF/classes以下に、外部から導入したクラスライブラリファイルはWEB-INF/lib以下に配置するのがWebアプリケーションの基本的なディレクトリ構成で、ソースファイルは管理しやすさからWEB-INF/srcに配置していました。

mavenでビルドできるようにするにはディレクトリ配置を以下のように変更します。

standings (アプリケーションルート)
+ WEB-INF
+ + src (javaソースファイルディレクトリ)

+ + + standings (パッケージディレクトリ)

+ + + + AddMatch.java (javaソースファイル)

+ + + + DuplicatedMatchException.java (javaソースファイル)

+ + + + ... (以下省略)

+ src (ソースディレクトリ)

+ + main (メインソースディレクトリ)

+ + + webapp (Webアプリケーションソースディレクトリ)

+ + + + add_match.jsp (JSPファイル)

+ + + + duplicated_params.jsp (JSPファイル)

+ + + + ... (以下省略)

+ + + web.xml (Webアプリケーション定義ファイル)

+ pom.xml (maven設定ファイル)

コンパイル済みクラスファイルや外部ライブラリファイルはビルドにて生成・ダウンロードされてwarファイルに出力されるので、ここでフォルダ等を用意する必要はありません。

JSPやHTMLソースコードはsrc/main/webappディレクトリに、web.xmlもsrc配下などどこかに配置しなければならないという点が配備後のディレクトリ配置と異なるところになります。

このようにして作成したディレクトリ構造をeclipseで読み込むと編集とビルドが可能になります。

ビルド時はターゲットとしてpackageを指定する必要がある点に注意が必要ですけど。

以上をとりあえずgithubに保存しました。

と、今日はこんなところで。


0コメント

  • 1000 / 1000