VSCodeでOpen LibertyプロジェクトをAntからMavenに

VSCodeでOpen LibertyプロジェクトをAntビルドからMavenビルドに変更した際の大まかな手順と個人的につまずいた点をまとめました。


# Maven 基礎知識
こちらについては、詳細は別サイトや書籍などでご確認ください。ライブラリをpom.xmlに記述することで管理し、ビルド時に[Maven セントラルリポジトリ](https://mvnrepository.com/)から自動でダウンロードして使えるという点が最も大きな特徴と思われます。

# Maven移行の流れ
Mavenをインストール
環境変数「JAVA_HOME」に JDK のディレクトリのパス追加
環境変数「PATH」に Maven の実行ファイルのあるディレクトリを追加
インストールされたか確認
コマンドプロンプトでmvn –-versionを実行しバージョンが表示されるか確認
```
$ mvn --version
```
バージョン等の情報が表示されればインストール完了です。

# pom.xmlの記載
Packageの形式を指定します。今回はwarで作成しました。
```pom.xml
  <groupId>XXXXXX</groupId>
  <artifactId>XXXXXX</artifactId>
  <packaging>war</packaging>
  <version>1.0.0</version>
```
dependencyの記載はMavenのセントラルリポジトリにあるものは、セントラルリポジトリのMavenタブをコピーすると便利です。利用しているすべてのLibraryを記載しましょう。
```pom.xml
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>
```
OpenLibertyのPluginを記述
```pom.xml
 <project>
  ...
       <build>
        <finalName>XXXXXX</finalName>
        <plugins>
　　　　　...
		    <plugin>
		      <groupId>io.openliberty.tools</groupId>
		      <artifactId>liberty-maven-plugin</artifactId>
		      <version>3.3.4</version>
              <configuration>
                <runtimeArtifact>
                  <groupId>com.ibm.websphere.appserver.runtime</groupId>
                  <artifactId>wlp-javaee8</artifactId>
                  <version>21.0.0.3</version>
                </runtimeArtifact>
              </configuration>          
		    </plugin>
        </plugins>   
    </build> 
</project>
 ```
作成したwarファイルの出力先を記述
${project.basedir}はプロジェクト直下を指します。
```pom.xml
 <project>
  ...
       <build>
        <finalName>XXXXXX</finalName>
        <plugins>
　　　　　...
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                        <warName>XXXXXX</warName>
                        <outputDirectory>${project.basedir}/src/main/liberty/config/apps</outputDirectory>
                       </configuration>       
            </plugin>        
        </plugins>   
    </build> 
</project>
 ```

# ディレクトリ構成変更
Mavenの標準の構成に従って、元のプロジェクトのフォルダやファイルを移動します。Mavenの標準構成でないとビルドは正常に実行されないので注意。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3191657/3c7b5519-eb41-056e-c5d7-ad075b0e7499.png)


Javaソースコード：
/src/main/java/com/任意の名前/
任意の名前（プロジェクト名など）のディレクトリの下にソースコードのフォルダやファイルを移動する。元のソースコードが階層構造になっている場合はそのまま任意の名前の配下に配置する。

Liberty設定：
/src/main/liberty/config/
config配下にappsフォルダを配置して、apps配下にwarファイルを出力するようにpom.xmlで設定します（後述）。

js、WEB-INFフォルダなど：
/src/main/webapp/
jsやWEB-INFフォルダなどはそのままwebapp配下に移動します。

Resourceファイル：
/src/main/resources/
Resourceファイルはフォルダごとresources配下に移動します。

# ディレクトリ構成変更に伴う変更
ソースコードの移動に伴い、JavaのPackage、Importの記載、各種xmlなど変更
（com以降を記載する）
 ```XXXX.java
package com.XXX.controller;

import com.XXX.dao.XXXXXXX;
import com.XXX.entity.XXXXXX;
 ```
```mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="cacheEnabled" value="true"/>
	</settings>

	<typeAliases>
		 <typeAlias type="com.XXX.entity.XXXXXX" alias="XXXXXX" />
```
変更にもれがあると参照されず動作不良となるので、もれなく探して変更しましょう。
（私の場合はresourceファイルの参照がうまくいっておらず特定に時間がかかりました。）

# Mavenコマンドで実行
VSCodeのterminalでそれぞれのコマンドを発行して実行します。よく利用するコマンドをご紹介します。

Build時に作成されるtargetフォルダを削除
```
$ mvn clean
 ```
コンパイル、Classファイルの作成
```
$ mvn compile
 ```
 エンコードやJavaバージョンの指定はpom.xmlのpluginに記載
 ```pom.xml
 <project>
  ...
       <build>
        <finalName>XXXXXX</finalName>
        <plugins>
　　　　　...
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>   
    </build> 
</project>
 ```
pom.xmlで指定された形式でパッケージ、warやearファイルの作成
```
$ mvn package
 ```
ローカルリポジトリにインストール
```
$ mvn install
 ```
LocalでLibertyの起動
```
$ mvn liberty:run
```
Localが起動したら動作確認を行いましょう。お疲れ様でした。