「maven2/コマンド/exec:java(javaのmainメソッドを実行する)」の編集履歴(バックアップ)一覧はこちら
「maven2/コマンド/exec:java(javaのmainメソッドを実行する)」(2008/10/20 (月) 14:45:17) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
maven2からのmainメソッドの実行がしたいのです。
#contents
*なにもかもmaven2でやりたいの
javaクラスの実行って、コマンドプロンプトから「java クラス名」って叩けばやってくれるです。
でもmaven2ではどうやるんだろう。
testとかは「mvn test」でJunitが動くです。
「mvn Java」みたいなのないのかな。。。とおもった私。
みつけました。
execプラグインさんがやってくれます。
*execプラグインとやら
execプラグインさんはmvn exec:***と叩けば以下からダウンロードしてくれるので難しいことはなさそう。
http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/
※2008/5月時点で最新は1.1でした。ググって調べたら1.0.2を使っているところばかり。
1.0.2だと引数の指定がなんだかうまくいってないみたい。
*参考サイト様
execプラグインの使い方のところ。
http://mojo.codehaus.org/exec-maven-plugin/usage.html
「exec:java」で検索すると使い方があります。
*前提条件
-maventestプロジェクトをcreateする。
-サンプルのApp.javaをそのまま使う。
-コンパイルは終わってますかー?
*コマンドexec:java
以下のコマンドを実行ですよ!
mvn exec:java
*何も考えずに実行してみる(うまくいかなかったです)
とりあえずやってみましょう。考えるのはその後!
**pom.xmlの状態
今のpomはこんな感じ
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.co.dotcom</groupId>
<artifactId>maventest</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maventest</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
余計なものは何も書いてないです。
**実行してみる
上記の環境でコマンド叩いたらこんな結果になりました。
>Z:\maventest>mvn exec:java
>[INFO] Scanning for projects...
>[INFO] Searching repository for plugin with prefix: 'exec'.
>[INFO] artifact org.codehaus.mojo:exec-maven-plugin: checking for updates from central
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-
1.1.pom
>3K downloaded
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-1.1.jar
>26K downloaded
>[INFO] ----------------------------------------------------------------------------
>[INFO] Building maventest
>[INFO] task-segment: [exec:java]
>[INFO] ----------------------------------------------------------------------------
>[INFO] Preparing exec:java
>[INFO] No goals needed for project - skipping
>[INFO] ------------------------------------------------------------------------
>[ERROR] BUILD ERROR
>[INFO] ------------------------------------------------------------------------
>[INFO] One or more required plugin parameters are invalid/missing for 'exec:java'
>
>[0] inside the definition for plugin: 'exec-maven-plugin'specify the following:
>
><configuration>
> ...
> <mainClass>VALUE</mainClass>
></configuration>
>
>-OR-
>
>on the command line, specify: '-Dexec.mainClass=VALUE'
>
>[INFO] ------------------------------------------------------------------------
>[INFO] For more information, run Maven with the -e switch
>[INFO] ------------------------------------------------------------------------
>[INFO] Total time: 38 seconds
>[INFO] Finished at: Wed May 21 17:27:42 JST 2008
>[INFO] Final Memory: 2M/5M
>[INFO] ------------------------------------------------------------------------
>
>Z:\maventest>
怒られたー!
mainClassを指定しろよ!って言われてます。あはは。
そうですね、maventestプロジェクトの中のどのクラスを実行するのかさえ指定してないです。
エラーメッセージを見ると、「こうしてよ!」って例が2つかかれてます。
試してみましょう。
*コマンドを叩くときにメインクラスを指定して実行(うまくいってる!)
ちゃんと頭使うことにします。
先ほどのエラーメッセージのところに
>-OR-
>
>on the command line, specify: '-Dexec.mainClass=VALUE'
って書いてありました。
「-OR-」の前にも何か書いてありましたが、ちょとそっちはおいときたい気分。あとでやります。
読んでみます。
on the command line
ってことはコマンドの指定が足りなかったのね。。。
どうやら
-Dexec.mainClass=VALUE
をくっつけたらどう?って言ってるみたい。(ちょっと違うよ?)
なるほど「-D」のつく記述はコマンドラインで指定できるものだから、こっちのほうが手っ取り早そうね。
というわけで「-Dexec.mainClass=VALUE」を追加して実行してみることにします。
にしても、
VALUE
は何を書くのかな。クラスファイルを指定するのかな。
むう。パッケージ名から指定してあげないとだめかな。
じゃこれでどうだ!
mvn exec:java -Dexec.mainClass=jp.co.dotcom.App
とりあえずこれでいってみましょうそうしましょう。
**pom.xml
先程と変わらないので割愛。
**実行結果
「-Dexec.mainClass」を指定して実行してみましたらこんなんでました。
>Z:\maventest>mvn exec:java -Dexec.mainClass=jp.co.dotcom.App
>[INFO] Scanning for projects...
>[INFO] Searching repository for plugin with prefix: 'exec'.
>[INFO] ---------------------------------------------------------------------------
>[INFO] Building maventest
>[INFO] task-segment: [exec:java]
>[INFO] ---------------------------------------------------------------------------
>[INFO] Preparing exec:java
>[INFO] No goals needed for project - skipping
>[INFO] [exec:java]
>Hello World!
>[INFO] ------------------------------------------------------------------------
>[INFO] BUILD SUCCESSFUL
>[INFO] ------------------------------------------------------------------------
>[INFO] Total time: 1 second
>[INFO] Finished at: Wed May 21 17:48:40 JST 2008
>[INFO] Final Memory: 2M/5M
>[INFO] ------------------------------------------------------------------------
>
>Z:\maventest>
やりましたよおかあさん!(誰?)
>Hello World!
ってでてますね!
サンプルそのまんまのApp.mainを呼んでるってことですね!
成功です!
でも。。。いちいちコマンド叩くたびにクラスを指定するのは面倒ですね。パッケージから指定だし。
というわけで先ほどすっとばした<configuration>を指定しろよーっていうの、やってみましょう。
つまり最初っからpom.xmlに書いておいてmvn exec:javaと実行するたびそこを見てくれるってやつ。
*pom.xmlにexecのpluginを追加してmainクラスを指定する
先ほどのエラーメッセージに
>[0] inside the definition for plugin: 'exec-maven-plugin'specify the following:
>
><configuration>
> ...
> <mainClass>VALUE</mainClass>
></configuration>
ってありました。
configrationを設定しろよ!って言ってます。
というわけでpom.xmlをさわります。
まず、execコマンドでお願いしたいクラス指定するためには、execプラグインを指定しないとです。
これはbuildタグの中に追加してくです。
こういうの。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<executable>java</executable>
<mainClass>jp.co.dotcom.App</mainClass>
</configuration>
</plugin>
groupIdとartifactIdは最初に何も考えずに一番最初にexec:javaを実行した時にダウンロードしていたログから探します。
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-1.1.jar
って出力されてたです。これですね。
つまりgroupIdが
org/codehaus/mojo
で、
artifactIdが
exec-maven-plugin/
で。
最後にversionが
1.1/
ですね。
ちょっと邪道なやり方ですがこれで必要な情報が手に入りました。
ちなみにexec:javaを実行していれば、ローカルリポジトリに入ってるのでそちらも見てもgroupIdとかわかるです。
**pom.xmlにexecプラグインの設定をするために必要な情報
-groupId : org.codehaus.mojo
-articaftId : exec-maven-plugin
-version : 1.1ですです。
-executable : exec:javaって打つので「java」
-mainClass : パッケージ名含むクラス名。先ほど-Dexec.mainClassで指定したやつ
**pom.xmlにexecプラグインの記述を追加する。
さて。
pom.xmlを触りますよ!
pluginはたくさんあるかもなのでpluginsタグの中に書きます。
さらにpluginsタグはbuildタグ内に書くです。
つりーなことをずらずら書きましたが、つまりpomの全体は以下の通り。
**exec-maven-pluginタグを追加したpom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.co.dotcom</groupId>
<artifactId>maventest</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maventest</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<executable>java</executable>
<mainClass>jp.co.dotcom.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
buildタグのところが追加です。
**実行してみる
pomの設定ができたので、-Dexec.mainClassを指定しなくても動くか確認してみました。
>Z:\maventest>mvn exec:java
>[INFO] Scanning for projects...
>[INFO] Searching repository for plugin with prefix: 'exec'.
>[INFO] ----------------------------------------------------------------------------
>[INFO] Building maventest
>[INFO] task-segment: [exec:java]
>[INFO] ----------------------------------------------------------------------------
>[INFO] Preparing exec:java
>[INFO] No goals needed for project - skipping
>[INFO] [exec:java]
>Hello World!
>[INFO] ------------------------------------------------------------------------
>[INFO] BUILD SUCCESSFUL
>[INFO] ------------------------------------------------------------------------
>[INFO] Total time: 1 second
>[INFO] Finished at: Wed May 21 18:02:33 JST 2008
>[INFO] Final Memory: 2M/5M
>[INFO] ------------------------------------------------------------------------
>
>Z:\maventest>
おおー!
>Hello World!
がでている!成功です!
やるなあexecプラグイン!
これでpom.xmlでmainClassを指定する方法がわかりました。
あとは。。。
mainメソッドに引数を渡す方法がわからないわ!
*mainメソッドに引数渡して実行してみたい
main(String[] args)のargsを指定する方法です。
[[javaのmainメソッドを引数を渡して実行したいの>maven2/javaのmainメソッドを引数を渡して実行したいの]]
maven2からのmainメソッドの実行がしたいのです。
#contents
*なにもかもmaven2でやりたいの
javaクラスの実行って、コマンドプロンプトから「java クラス名」って叩けばやってくれるです。
でもmaven2ではどうやるんだろう。
testとかは「mvn test」でJunitが動くです。
「mvn Java」みたいなのないのかな。。。とおもった私。
みつけました。
execプラグインさんがやってくれます。
*execプラグインとやら
execプラグインさんはmvn exec:***と叩けば以下からダウンロードしてくれるので難しいことはなさそう。
http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/
※2008/5月時点で最新は1.1でした。ググって調べたら1.0.2を使っているところばかり。
1.0.2だと引数の指定がなんだかうまくいってないみたい。
*参考サイト様
execプラグインの使い方のところ。
http://mojo.codehaus.org/exec-maven-plugin/usage.html
「exec:java」で検索すると使い方があります。
*前提条件
-maventestプロジェクトをcreateする。
-サンプルのApp.javaをそのまま使う。
-コンパイルは終わってますかー?
*コマンドexec:java
以下のコマンドを実行ですよ!
mvn exec:java
*何も考えずに実行してみる(うまくいかなかったです)
とりあえずやってみましょう。考えるのはその後!
**pom.xmlの状態
今のpomはこんな感じ
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/maven-v4_0_0.xsd">
> <modelVersion>4.0.0</modelVersion>
> <groupId>jp.co.dotcom</groupId>
> <artifactId>maventest</artifactId>
> <packaging>jar</packaging>
> <version>1.0-SNAPSHOT</version>
> <name>maventest</name>
> <url>http://maven.apache.org</url>
> <dependencies>
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> <version>3.8.1</version>
> <scope>test</scope>
> </dependency>
> </dependencies>
> </project>
余計なものは何も書いてないです。
**実行してみる
上記の環境でコマンド叩いたらこんな結果になりました。
>Z:\maventest>mvn exec:java
>[INFO] Scanning for projects...
>[INFO] Searching repository for plugin with prefix: 'exec'.
>[INFO] artifact org.codehaus.mojo:exec-maven-plugin: checking for updates from central
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-1.1.pom
>3K downloaded
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-1.1.jar
>26K downloaded
>[INFO] ----------------------------------------------------------------------------
>[INFO] Building maventest
>[INFO] task-segment: [exec:java]
>[INFO] ----------------------------------------------------------------------------
>[INFO] Preparing exec:java
>[INFO] No goals needed for project - skipping
>[INFO] ------------------------------------------------------------------------
>[ERROR] BUILD ERROR
>[INFO] ------------------------------------------------------------------------
>[INFO] One or more required plugin parameters are invalid/missing for 'exec:java'
>
>[0] inside the definition for plugin: 'exec-maven-plugin'specify the following:
>
><configuration>
> ...
> <mainClass>VALUE</mainClass>
></configuration>
>
>-OR-
>
>on the command line, specify: '-Dexec.mainClass=VALUE'
>
>[INFO] ------------------------------------------------------------------------
>[INFO] For more information, run Maven with the -e switch
>[INFO] ------------------------------------------------------------------------
>[INFO] Total time: 38 seconds
>[INFO] Finished at: Wed May 21 17:27:42 JST 2008
>[INFO] Final Memory: 2M/5M
>[INFO] ------------------------------------------------------------------------
>
>Z:\maventest>
怒られたー!
mainClassを指定しろよ!って言われてます。あはは。
そうですね、maventestプロジェクトの中のどのクラスを実行するのかさえ指定してないです。
エラーメッセージを見ると、「こうしてよ!」って例が2つかかれてます。
試してみましょう。
*コマンドを叩くときにメインクラスを指定して実行(うまくいってる!)
ちゃんと頭使うことにします。
先ほどのエラーメッセージのところに
>-OR-
>
>on the command line, specify: '-Dexec.mainClass=VALUE'
って書いてありました。
「-OR-」の前にも何か書いてありましたが、ちょとそっちはおいときたい気分。あとでやります。
読んでみます。
on the command line
ってことはコマンドの指定が足りなかったのね。。。
どうやら
-Dexec.mainClass=VALUE
をくっつけたらどう?って言ってるみたい。(ちょっと違うよ?)
なるほど「-D」のつく記述はコマンドラインで指定できるものだから、こっちのほうが手っ取り早そうね。
というわけで「-Dexec.mainClass=VALUE」を追加して実行してみることにします。
にしても、
VALUE
は何を書くのかな。クラスファイルを指定するのかな。
むう。パッケージ名から指定してあげないとだめかな。
じゃこれでどうだ!
mvn exec:java -Dexec.mainClass=jp.co.dotcom.App
とりあえずこれでいってみましょうそうしましょう。
**pom.xml
先程と変わらないので割愛。
**実行結果
「-Dexec.mainClass」を指定して実行してみましたらこんなんでました。
>Z:\maventest>mvn exec:java -Dexec.mainClass=jp.co.dotcom.App
>[INFO] Scanning for projects...
>[INFO] Searching repository for plugin with prefix: 'exec'.
>[INFO] ---------------------------------------------------------------------------
>[INFO] Building maventest
>[INFO] task-segment: [exec:java]
>[INFO] ---------------------------------------------------------------------------
>[INFO] Preparing exec:java
>[INFO] No goals needed for project - skipping
>[INFO] [exec:java]
>Hello World!
>[INFO] ------------------------------------------------------------------------
>[INFO] BUILD SUCCESSFUL
>[INFO] ------------------------------------------------------------------------
>[INFO] Total time: 1 second
>[INFO] Finished at: Wed May 21 17:48:40 JST 2008
>[INFO] Final Memory: 2M/5M
>[INFO] ------------------------------------------------------------------------
>
>Z:\maventest>
やりましたよおかあさん!(誰?)
>Hello World!
ってでてますね!
サンプルそのまんまのApp.mainを呼んでるってことですね!
成功です!
でも。。。いちいちコマンド叩くたびにクラスを指定するのは面倒ですね。パッケージから指定だし。
というわけで先ほどすっとばした<configuration>を指定しろよーっていうの、やってみましょう。
つまり最初っからpom.xmlに書いておいてmvn exec:javaと実行するたびそこを見てくれるってやつ。
*pom.xmlにexecのpluginを追加してmainクラスを指定する
先ほどのエラーメッセージに
>[0] inside the definition for plugin: 'exec-maven-plugin'specify the following:
>
><configuration>
> ...
> <mainClass>VALUE</mainClass>
></configuration>
ってありました。
configrationを設定しろよ!って言ってます。
というわけでpom.xmlをさわります。
まず、execコマンドでお願いしたいクラス指定するためには、execプラグインを指定しないとです。
これはbuildタグの中に追加してくです。
こういうの。
> <plugin>
> <groupId>org.codehaus.mojo</groupId>
> <artifactId>exec-maven-plugin</artifactId>
> <version>1.1</version>
> <configuration>
> <executable>java</executable>
> <mainClass>jp.co.dotcom.App</mainClass>
> </configuration>
> </plugin>
groupIdとartifactIdは最初に何も考えずに一番最初にexec:javaを実行した時にダウンロードしていたログから探します。
>Downloading: http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/exec-maven-plugin-1.1.jar
って出力されてたです。これですね。
つまりgroupIdが
org/codehaus/mojo
で、
artifactIdが
exec-maven-plugin/
で。
最後にversionが
1.1/
ですね。
ちょっと邪道なやり方ですがこれで必要な情報が手に入りました。
ちなみにexec:javaを実行していれば、ローカルリポジトリに入ってるのでそちらも見てもgroupIdとかわかるです。
**pom.xmlにexecプラグインの設定をするために必要な情報
-groupId : org.codehaus.mojo
-articaftId : exec-maven-plugin
-version : 1.1ですです。
-executable : exec:javaって打つので「java」
-mainClass : パッケージ名含むクラス名。先ほど-Dexec.mainClassで指定したやつ
**pom.xmlにexecプラグインの記述を追加する。
さて。
pom.xmlを触りますよ!
pluginはたくさんあるかもなのでpluginsタグの中に書きます。
さらにpluginsタグはbuildタグ内に書くです。
つりーなことをずらずら書きましたが、つまりpomの全体は以下の通り。
**exec-maven-pluginタグを追加したpom.xml
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/maven-v4_0_0.xsd">
> <modelVersion>4.0.0</modelVersion>
> <groupId>jp.co.dotcom</groupId>
> <artifactId>maventest</artifactId>
> <packaging>jar</packaging>
> <version>1.0-SNAPSHOT</version>
> <name>maventest</name>
> <url>http://maven.apache.org</url>
>
> <build>
> <plugins>
> <plugin>
> <groupId>org.codehaus.mojo</groupId>
> <artifactId>exec-maven-plugin</artifactId>
> <version>1.1</version>
> <configuration>
> <executable>java</executable>
> <mainClass>jp.co.dotcom.App</mainClass>
> </configuration>
> </plugin>
> </plugins>
> </build>
>
> <dependencies>
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> <version>3.8.1</version>
> <scope>test</scope>
> </dependency>
> </dependencies>
> </project>
buildタグのところが追加です。
**実行してみる
pomの設定ができたので、-Dexec.mainClassを指定しなくても動くか確認してみました。
> Z:\maventest>mvn exec:java
> [INFO] Scanning for projects...
> [INFO] Searching repository for plugin with prefix: 'exec'.
> [INFO] ----------------------------------------------------------------------------
> [INFO] Building maventest
> [INFO] task-segment: [exec:java]
> [INFO] ----------------------------------------------------------------------------
> [INFO] Preparing exec:java
> [INFO] No goals needed for project - skipping
> [INFO] [exec:java]
> Hello World!
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESSFUL
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 1 second
> [INFO] Finished at: Wed May 21 18:02:33 JST 2008
> [INFO] Final Memory: 2M/5M
> [INFO] ------------------------------------------------------------------------
>
> Z:\maventest>
おおー!
>Hello World!
がでている!成功です!
やるなあexecプラグイン!
これでpom.xmlでmainClassを指定する方法がわかりました。
あとは。。。
mainメソッドに引数を渡す方法がわからないわ!
*mainメソッドに引数渡して実行してみたい
main(String[] args)のargsを指定する方法です。
[[javaのmainメソッドを引数を渡して実行したいの>maven2/javaのmainメソッドを引数を渡して実行したいの]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: