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

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

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

記事を読む

no image

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

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

記事を読む

GradleLogoReg

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

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

記事を読む

no image

Jetty でシンプルなプロジェクトを作成してみた

プロトタイプを作成するなら Tomcat よりも Jetty のほうがさらっと出来そうだなぁ、と今さ

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

icatch-3361b5e1-resized

Optional型の変数にget()とifPresent()は使わない

Java8 から導入された Optional を勉強するため、過去にプライベートで書いたコードに O

記事を読む

no image

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

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

記事を読む

medium_2055608272

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

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

記事を読む

icatch-upload_1229138273_mini-thumbnail

InputStream に格納されているストリームデータのサイズを取得する

Jersey を使った Web アプリを作成中なんですが、 enctype="multipart/f

記事を読む

Googleアドセンス用(PC)

Message

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


7 − = 一

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