2013-12-20 18 views
6

私はmaven execプラグインを使用して、コマンドラインからmvn exec:javaというjavaアプリケーションを実行しています。私はpom.xmlと関連する依存関係のメインクラスを指定しました。Maven execプラグインClassNotFoundException

<groupId>com.example.MyApp</groupId> 
<artifactId>MyApp</artifactId> 
<version>1.0.0</version> 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2.1</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>java</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
      <mainClass>com.example.myclass</mainClass> 
      <arguments> 
      <argument>configFile</argument> 
      <argument>properties</argument> 
      </arguments> 
     </configuration> 
    </plugin> 

私も依存関係の数を指定します...

<dependencies> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
    <type>jar</type> 
</dependency> 
<dependency> 
    <groupId>com.example.MyLibrary</groupId> 
    <artifactId>MyLibrary</artifactId> 
    <version>1.0.0</version> 
</dependency> 

MyAppプログラムは、コマンドライン引数として渡された設定ファイルを読み込みます。設定ファイルには、MyLibraryにあるクラスの名前が含まれています。したがって、クラスはcom.mypackage.driver.MyClassとなります。これは上記のMyApp jarの依存関係であるMyLibraryにあります。私はこれを実行しようとすると は、しかし、私は取得ClassNotFoundException ...

更新----私はMyAppプログラムのコマンドラインに渡されたクラスをロードするためにシステムのクラスローダを使用してい

ClassLoader loader = ClassLoader.getSystemClassLoader(); 

私は、依存関係が含まれていないデフォルトのクラスパス上のクラスを探しているので、これが問題を引き起こしていると考えています。

ここで間違っていることに関するヒントはありますか?

答えて

12

まだこの質問に対する回答をお探しですか?私はまったく同じ問題を抱えていて、やっとそれを理解しました。

あなたはプラグインはメインクラスのためのあなたの依存関係を検索するために、あなたの設定にincludePluginDependenciesを追加する必要があります。

<configuration> 
    <includePluginDependencies>true</includePluginDependencies> 
    <mainClass>com.example.myclass</mainClass> 
    <arguments> 
    <argument>configFile</argument> 
    <argument>properties</argument> 
    </arguments> 
</configuration> 

はこちらをご覧ください:http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html#includePluginDependenciesこんにちは@Moritzは、あなたがこの上さらに詳しく説明することができます

+0

私は同じ問題があり、includePluginDependenciesを追加しましたが、まだClassNotFoundExceptionです。その他の提案はありますか? –

0

あなたは、クラスパスは次のように生成されますさせることができます:コマンドラインから実行する前に

<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> 
+1

、私は一度mvn execを実行すると印象に残っていました:javaこのプロジェクトによって定義された依存関係は自動的にクラスパスに含まれます... – Barry

0

は、コマンドラインでも、あなたのライブラリをインポートする必要があります。あなたはあなたのライブラリーのごexpecific名前と情報で、このコマンドを使用することができます。

mvn install:install-file -Dfile=MyLibrary.jar -DgroupId=com.example.MyLibrary -DartifactId=MyLibrary -Dversion=1.0.0 -Dpackaging=jar 
+1

こんにちは、ありがとう、応答は、私のローカルリポジトリにある – Barry

0

あなたが実行プラグインの依存関係として依存関係を追加する必要があり、その実行プラグインは、あなたがcom.example.myclassを設定されたクラスをロードすることができます

<plugins> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    [...] 
    <dependencies> 
    <dependency> 
     <groupId>com.example.MyLibrary</groupId> 
     <artifactId>MyLibrary</artifactId> 
     <version>1.0.0</version> 
     <type>jar</type> 
    </dependency> 

</plugin> 
+0

応答をありがとう、私はプラグインに依存関係を追加しましたが、それでも私にclassnotfoundエラーを与えています。私はこの例をここに従ってきました。http://mojo.codehaus.org/exec-maven-plugin/examples/example-exec-using-plugin-dependencies.html – Barry

関連する問題