2012-03-28 11 views
4

ちょっと、私はコマンドラインから実行可能なjarとして実行できるようにしたいプロジェクトに取り組んできました。私は、Mavensアセンブリを使用して依存関係を持つjarファイルを作成することができました。私のポンはこのように見える。依存関係を持つ実行可能なjarを実行する際の問題

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>org.openmetadata.main.OmadUpdate</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

ビルドが成功するとjar omad更新-0.0.1-SNAPSHOT-ジャーと-dependencies.jarを作成します。私は、コマンドラインで私のプロジェクトのターゲットフォルダに移動し、私も残念ながら、私はjava.lang.NoClassDefFoundErrorが与えられていますそれぞれの場合に

java -cp omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.openmetadata.main.OmadUpdate 

を試してみました

java -jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar 

タイプ:ORG/openmetadata /メイン/ OmadUpdate。メインクラスがorg.openmetadata.mainパッケージに含まれていることがわかっているのに混乱していますが、まだ見つかりません。私はこのクラスを私のメインクラスとして指定しているので、これは特に混乱しています。私はメインクラスの名前をsrc.main.java.org.openmetadata.main.OmadUpdateに変更しようとしましたが、単にOmadUpdateも同様に効果があるようです。事前に助けてくれてありがとう。

答えて

2

上記のマニフェストにClass-Pathという項目はありませんが、非常に長いファイル名には依存関係が記述されています。このjarファイル内にプログラムが依存するjarがある場合は、Class-Pathセクションに列挙する必要があります。詳細はAdding Classes to the JAR File's Classpathを参照してください。

+0

しかし、このページの[リンク](http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#aResources)によると、クラスパスを指定する必要はないようです必要に応じて依存関係をパッケージ化します。私はそれを前提とした間違いをしていると思う。 – decal

+0

jarファイルを開き、META-INFディレクトリのMANIFEST.MFファイルを探します。クラスパスは指定されていますか? – Mike

+1

申し訳ありませんでしたので、Mavens [ウェブサイト](http://maven.apache.org/shared/maven-archiver/examples/classpath.html#aMake)でpom.xmlに trueを追加しましたクラスパスを処理する必要がありますが、実行可能なjarを実行しようとするとMainクラスが見つからないという問題がまだ発生しています。 – decal

0

もう1つのオプションはonejar-maven-pluginです。残念ながら、usageページは少し不足していますが、プラグインは正しく設定されたときに想定されていることを行います。

0

私は最終的に、私のpomに次のコードを追加することでこれを動作させることができました。その子と一緒にポンポンで処刑タグなし

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

はMavenの依存関係はjarファイルに追加され、プロジェクト自体のクラスが追加されることはありません。

関連する問題