comscom@Wiki
exec:java(javaのmainメソッドを実行する)
最終更新:
Bot(ページ名リンク)
-
view
maven2からのmainメソッドの実行がしたいのです。
なにもかもmaven2でやりたいの
javaクラスの実行って、コマンドプロンプトから「java クラス名」って叩けばやってくれるです。
でもmaven2ではどうやるんだろう。
testとかは「mvn test」でJunitが動くです。
「mvn Java」みたいなのないのかな。。。とおもった私。
でもmaven2ではどうやるんだろう。
testとかは「mvn test」でJunitが動くです。
「mvn Java」みたいなのないのかな。。。とおもった私。
みつけました。
execプラグインさんがやってくれます。
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だと引数の指定がなんだかうまくいってないみたい。
http://repo1.maven.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.1/
※2008/5月時点で最新は1.1でした。ググって調べたら1.0.2を使っているところばかり。
1.0.2だと引数の指定がなんだかうまくいってないみたい。
参考サイト様
前提条件
- 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つかかれてます。
試してみましょう。
エラーメッセージを見ると、「こうしてよ!」って例が2つかかれてます。
試してみましょう。
コマンドを叩くときにメインクラスを指定して実行(うまくいってる!)
ちゃんと頭使うことにします。
先ほどのエラーメッセージのところに
-OR-
on the command line, specify: '-Dexec.mainClass=VALUE'
って書いてありました。
「-OR-」の前にも何か書いてありましたが、ちょとそっちはおいときたい気分。あとでやります。
「-OR-」の前にも何か書いてありましたが、ちょとそっちはおいときたい気分。あとでやります。
読んでみます。
on the command line
ってことはコマンドの指定が足りなかったのね。。。
どうやら
-Dexec.mainClass=VALUE
をくっつけたらどう?って言ってるみたい。(ちょっと違うよ?)
なるほど「-D」のつく記述はコマンドラインで指定できるものだから、こっちのほうが手っ取り早そうね。
なるほど「-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を呼んでるってことですね!
成功です!
サンプルそのまんまのApp.mainを呼んでるってことですね!
成功です!
でも。。。いちいちコマンド叩くたびにクラスを指定するのは面倒ですね。パッケージから指定だし。
というわけで先ほどすっとばした<configuration>を指定しろよーっていうの、やってみましょう。
つまり最初っからpom.xmlに書いておいてmvn exec:javaと実行するたびそこを見てくれるってやつ。
つまり最初っから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を設定しろよ!って言ってます。
configrationを設定しろよ!って言ってます。
というわけでpom.xmlをさわります。
まず、execコマンドでお願いしたいクラス指定するためには、execプラグインを指定しないとです。
これはbuildタグの中に追加してくです。
まず、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を実行した時にダウンロードしていたログから探します。
って出力されてたです。これですね。
つまりgroupIdが
つまりgroupIdが
org/codehaus/mojo
で、
artifactIdが
exec-maven-plugin/
で。
最後にversionが
1.1/
ですね。
ちょっと邪道なやり方ですがこれで必要な情報が手に入りました。
ちなみにexec:javaを実行していれば、ローカルリポジトリに入ってるのでそちらも見てもgroupIdとかわかるです。
ちなみに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を触りますよ!
pom.xmlを触りますよ!
pluginはたくさんあるかもなのでpluginsタグの中に書きます。
さらにpluginsタグはbuildタグ内に書くです。
さらに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を指定する方法がわかりました。
やるなあexecプラグイン!
これでpom.xmlでmainClassを指定する方法がわかりました。
あとは。。。
mainメソッドに引数を渡す方法がわからないわ!
mainメソッドに引数を渡す方法がわからないわ!
mainメソッドに引数渡して実行してみたい
main(String[] args)のargsを指定する方法です。