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

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

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

記事を読む

medium_2055608272

指定した年月の日付を Calendar オブジェクトの一覧で取得する

小ワザです。 業務で、指定した年月の日付を Calendar オブジェクトの一覧で取得する必要があり

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

medium_182531101

ClassLoader を使って getResourceAsStream で取得したファイルを UTF-8 で読み込む

よく使う割には覚えられず毎回調べている気がするので備忘録としてメモしておきます。 文字コードを指定し

記事を読む

no image

プロセスの起動を確認するプログラム

プロセスが起動しているかを確認するプログラムを Java で書いてみました。Excel のプロセス確

記事を読む

GradleLogoReg

Gradle で Java アプリのプロジェクトを作成して Eclipse にインポートするまでの手順

Mac に SDKMAN! を使って Gradle をインストールしたので、実際にプロジェクトを作成

記事を読む

icatch-10139609144_5bc33706f9_z-resized

保存ダイアログを表示させてファイルをダウンロードさせる方法

例えば、ブラウザに表示している画像は右クリックを使ってダウンロードできますが、左クリックから保存ダイ

記事を読む

no image

Stream#filter()で絞り込みmap()で処理するコードスニペット

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

記事を読む

no image

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

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

記事を読む

Googleアドセンス用(PC)

Message

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


一 + = 8

次の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 ↑