ここ半年Javaを触っていますが、9割以上がWEBアプリでバッチ系のものを作る機会から外れていました。
今回バッチを作っており、IDEでは動くのにいざコンソールで動かそうと思ったら動かないということがあったのでメモしておきます。
Contents
IDEの弊害
Javaで開発をするプログラマの99%以上はEclipseかNetbeansのIDEを使っていると思います。
IDEの弊害としてコーディングをする際の様々なサポートがあるため、プログラマがその機能に頼ってしまい、基本的な操作を覚えなくなってしまうということが挙げられます。
まあ、プログラマが悪いのであってIDEが悪いわけではないのですが(汗)
jarファイルを作るには
今回ビルドしたjarファイルを動かそうと思ったらXXXXXX.jarにメイン・マニフェスト属性がありません
と怒られてしまいました。
どうやらjarファイルを作成するにはバージョンや実行ファイル、依存ライブラリなどを定義するマニフェストファイルというものが必要なようです。
マニフェストファイルについて
https://docs.oracle.com/javase/jp/1.5.0/guide/jar/jar.html
マニフェストファイルの定義の仕方
このようなマニフェストファイルの作り方ですが、pomに以下のように記述すればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>sample.hoge.Main</mainClass> <addClasspath>true</addClasspath> <addExtensions>true</addExtensions> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> |
上記の記述の細かい説明などは下記へ
NetBeansのMavenプロジェクトで実行可能ファイルを作る
mavenで実行可能なjarファイルと依存ライブラリを含めたzipアーカイブを作成する
依存ライブラリエラー
上記を記述したにも関わらず使っているライブラリがインポートされていない、NoClassDefFoundErrorがでてしまいました。
どうやらjarのなかに依存ライブラリをインポートするような記述が必要なようです。
下記のように記述すれば解決します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> |
https://www.ibm.com/developerworks/jp/java/library/j-5things13/
これでようやく動きました。
↑上記のように記述しても同階層にlibディレクトリがなければ動きません。
単独で動かすには下記のエントリーを参考にしてください。