Exec Maven Plugin で maven コマンドでアプリを起動する

公開日: : 最終更新日:2015/09/09 Java, Maven

packaging タグに “jar” を指定した Maven プロジェクトをコマンドラインから起動する場合、maven-shade-plugin もしくは maven-assembly-plugin を使わないと参照している外部のライブラリが JAR にパッケージされない。

それだけでもやや面倒な上にmvn package でのパッケージ作成は少々時間がかかる。
何かいい方法はないものかと検索すると、パッケージせずに Maven アプリが起動できる Exec Maven Plugin を見つけた。

以下はプラグインの導入メモ。

目次

1. Exec Maven Plugin を使ったアプリの起動手順

繰り返しになるが、これまでは以下の手順でアプリを起動していた。

  1. maven-shade-plugin もしくは maven-assembly-plugin のどちらかを pom.xml に定義
  2. mvn package コマンドを実行してアプリをパッケージ化(JAR が target ディレクトリに作成される)
  3. java -jar コマンドのパラメータに JAR を指定して実行

Exec Maven Plugin を使うと mvn コマンドから直接アプリを起動できるようになるのでパッケージにしなくてよい。

手順は以下の通りになる。

  1. exec-maven-plugin を pom.xml に定義
  2. mvn compile && mvn exec:java を実行してアプリを起動

Exec Maven Plugin を使うにしても pom.xml に plugin タグを追加するのは同じ。

導入メリットはアプリ起動までの時間が短縮されること。
パッケージする時間から解放されるため、待たされないのが個人的に大きい。

2. 適用例

ということで、pom.xml に書く plugin タグは以下の通り。

<properties>
  <mainclass.name>net.tomoyamkung.sample.SimpleJsonResource</mainclass.name>
</properties>

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.4.0</version>
      <executions>
        <execution>
          <goals>
            <goal>java</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <mainClass>${mainclass.name}</mainClass>
      </configuration>
    </plugin>
  </plugins>
</build>

mainClass タグに main() メソッドを持っているクラス名を定義する。
mainClass タグに直接書いても良いのだが、他にも参照する場合は上記のように propertites タグに切り出したほうが、1箇所で管理できるのでお勧め。

3. 更新履歴

  • 2015/09/09: 初版作成

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

no image

ファイルに関するユーティリティ

ファイルに関するスニペットをいくつか書いた。いつかコピペする日が来ると思うのでメモしておく。 作成

記事を読む

no image

画像ファイルを選別するFilenameFilter

画像ファイルのみアップロードを許可する仕様があって、何てことはないがフィルターを作って対応したのでメ

記事を読む

no image

Java から VBScript を使って Excel を印刷する

背景 Java のデスクトップアプリを作成していたときの要件に「Excel で作成された帳票を印刷

記事を読む

no image

Stream#map()とStream#collect()を使ってListを生成する

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

no image

ファイルの拡張子が JPG であるかを問い合わせるスニペット

特に目新しいこともないが、同じようなことをする機会があるかもしれないのでメモ。Gist にも登録済み

記事を読む

icatch-maven

spring framework を使ったデスクトップアプリ(standalone app)で maven-jar-plugin を使って作成した JAR を java コマンドで実行する

spring framework を使ったデスクトップアプリ(standalone app)で co

記事を読む

no image

ディレクトリに関するユーティリティ

ディレクトリに関するスニペットをいくつか書いた。いつかコピペする日が来ると思うのでメモしておく。

記事を読む

icatch-maven_5928412787

Maven で作成したプロジェクトのソースコードを JAR にする方法

Maven で作成したプロジェクトのソースコードを JAR にまとめて公開する方法を調べてみました。

記事を読む

no image

サーブレットでクラスパス上にあるプロパティファイルを参照するスニペット

よく使うわりにはいつも調べているのでいい加減メモすることにした。 "app.proper

記事を読む

no image

Google Guava の Function を使った文字列加工の FluentIterable サンプル

お客様の都合上 Java7 で開発している案件があるのだが、Java8 の Function とか

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


9 × 三 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑