Q:
Kotlinで、次のプログラムを作成し、「hello.kt」ファイルとして保存ました。
(プログラム)
fun main() { println(“Hello, World!”) }
そして、次の様に、Kotlinでコンパイルし、「hello.jar」ファイルを作成しました。
kotlinc hello.kt -include-runtime -d hello.jar
この「hello.jar」ファイルを、上記回答の項番3「Web アプリケーションとしてデプロイ可能な形式で .jar ファイルをパッケージ化する」にあるような、.warファイルに変換するには、どのようにすればよいでしょうか? 具体的に、分かり易く、教えて下さい。
A:
Kotlin のコンパイル結果である .jar ファイルを .war ファイルに変換するには、以下の手順を踏むことができます。
- .war ファイルを作成するためのディレクトリを作成します。例えば、”hello_war” という名前のディレクトリを作成します。
- 以下のディレクトリ構造を持つ、Web アプリケーションのディレクトリを作成します。
hello_war
|-- WEB-INF
| |-- classes
| |-- lib
|-- META-INF
| |-- MANIFEST.MF
|-- index.jsp
- WEB-INF/classes: Kotlin のコンパイル結果である .jar ファイルを配置します。
- WEB-INF/lib: 依存するライブラリ(必要に応じて)を配置します。
- META-INF/MANIFEST.MF: .war ファイルのメタ情報を記述する MANIFEST.MF ファイルを配置します。以下のような内容を持つ MANIFEST.MF ファイルを作成します。
Manifest-Version: 1.0
Main-Class: {パッケージ名}.Main
{パッケージ名} の部分は、Kotlin のソースコードで指定したパッケージ名に置き換えてください。(例: Main-Class: com.Hello.Main )※拡張子.jarは含めない
- Kotlin のコンパイル結果である .jar ファイルを、WEB-INF/classes ディレクトリに配置します。例えば、以下のようにコマンドを実行します。
cp hello.jar hello_war/WEB-INF/classes/
または、手動で .jar ファイルを WEB-INF/classes ディレクトリにコピーしてください。
- 必要に応じて、依存するライブラリを WEB-INF/lib ディレクトリに配置します。これは、Kotlin のコンパイルに使用したライブラリなどが含まれます。
- .war ファイルの MANIFEST.MF ファイルを META-INF/ ディレクトリに配置します。例えば、以下のようにコマンドを実行します。
echo 'Manifest-Version: 1.0' > hello_war/META-INF/MANIFEST.MF
echo 'Main-Class: {パッケージ名}.MainKt' >> hello_war/META-INF/MANIFEST.MF
{パッケージ名} の部分は、Kotlin のソースコードで指定したパッケージ名に置き換えてください。
- 作成したディレクトリを .war ファイルに圧縮します。例えば、以下のようにコマンドを実行します。
cd hello_war
jar -cvf hello.war *
これにより、hello.war と
いう名前の .war ファイルが作成されます。これが Kotlin のコンパイル結果である .jar ファイルを .war ファイルに変換したものです。
作成した .war ファイルを Tomcat の webapps ディレクトリに配置すると、Tomcat が自動的に展開し、Web アプリケーションとして実行されます。例えば、以下のようにコマンドを実行することで、Tomcat の webapps ディレクトリに .war ファイルをコピーできます。
cp hello.war /path/to/tomcat/webapps/
Tomcat が起動している場合は、.war ファイルが自動的に展開され、Web アプリケーションとして利用可能になります。その後、ブラウザなどでアクセスすることで、Kotlin のプログラムが実行されるでしょう。