読者です 読者をやめる 読者になる 読者になる

Maven2からmainメソッドを実行(exec-maven-pluginでS2アプリ)

Maven2 Seasar

exec-maven-pluginを使えばMaven2からmainメソッドを実行出来ます。

Test.java

package jp.co.abby.test;
public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println("Hello World!");
    }
}

pom.xml

・・・略・・・
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.0.2</version>
    <configuration>
      <executable>java</executable>
      <mainClass>jp.co.abby.test.Test</mainClass>
    </configuration>
  </plugin>
・・・略・・・

こんな設定で、mvn exec:java で実行可能

[INFO] [exec:java]
Hello World!

こんなの誰だって出来ちゃう。

どうしても出来なかったのがドキュメントにも書いてあるclasspathの設定。

        <configuration>
          <executable>java</executable>
          <arguments>
            <argument>-Dmyproperty=myvalue</argument>
            <argument>-classpath</argument>
            <!-- automatically creates the classpath using all project dependencies, 
                 also adding the project build directory -->
            <classpath/>
            <argument>com.example.Main</argument>
            ...
          </arguments>
        </configuration>
        <configuration>
          <executable>java</executable>
          <arguments>
            <argument>-Dmyproperty=myvalue</argument>
            <argument>-classpath</argument>
            <classpath>
              <dependency>commons-io:commons-io</dependency>
              <dependency>commons-lang:commons-lang</dependency>
            </classpath>
            <argument>com.example.Main</argument>
            ...
          </arguments>
        </configuration>

これは動かない。エラー出ます。

[INFO] Trace
java.lang.ArrayStoreException
        at java.lang.System.arraycopy(Native Method)
        at java.util.ArrayList.toArray(ArrayList.java:305)
        at org.codehaus.plexus.component.configurator.converters.composite.ArrayConverter.fromConfiguration(ArrayConverter.java:141)

同じような事を外国のMLとかで出てたけど解決には至ってない。
明示的にclasspathを指定する方法はどうすれば良いのか未だ不明...

Test.javaを少し変更してS2(2.3)絡めた場合

package jp.co.abby.test;
public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println("Hello World!");
        SingletonS2ContainerFactory.init();
    }
}

dependencyが正しく記述されていれば実行可能です。


argumentのclasspathは謎のまま><