2017-08-23 12 views
1

私はMavenに基づいて私のアプリケーションのjarファイルを構築しようとしています。だから私は外部のjarライブラリを私のビルドに含める必要はありません。私は、私のアプリケーションがローカルMavenリポジトリまたはローカルフォルダから実行時にこの外部依存関係を与える必要があります。これらの依存関係は、これらの外部ライブラリを含みます。 私はこのようなこの依存関係のための私のPOMファイルを設定します。外部JARライブラリを使ってMaven実行可能なjarをビルドするには?

<profiles> 
     <profile> 
      <id>compile</id> 
      <dependencies> 
       <dependency> 
        <groupId>groupId</groupId> 
        <artifactId>some.artifact</artifactId> 
        <version>1.0</version> 
       </dependency> 
      </dependencies> 
     </profile> 

と、この接頭辞-Pcompileで、このjarファイルを実行しようとしています。私はこれを使用していますanswer

実行時に、この外部ライブラリを使用するメソッドを実行しようとすると、私の外部ライブラリのクラス名にjava.lang.NoClassDefFoundErrorがあります。

どのようにローカルストレージから外部jarライブラリを使用するビルドを作成できますか?

+0

ここのように:https://stackoverflow.com/questions/11758594/how-do-i-put-all-required-jar-files-in-a -library-folder-inside-the-final-jar-fil – PeterMmm

+0

すべての依存関係を含む自己完結型実行可能ファイルjarファイルを作成する方がはるかに一般的です。展開を非常に簡単に、より安全にします。 https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven?rq=1 – Thilo

+0

@Thilo:これはライブラリがある場合は機能しませんBouncycastleのような依存関係は、署名された暗号プロバイダであり、jar-with依存関係はjar-signatureを殺してBCを失敗させるためです。 – Robert

答えて

0

最終的なMavenビルドの外にjarを格納する解決策が見つかりました。 このパスを正しいパスでクラスパスに追加するだけでした。このために私はのpom.xmlに以下を追加:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix> 
         <mainClass>your.mainClass</mainClass> 
         </manifest> 
         <manifestEntries> 
          <Class-Path>project-0.0.1-SNAPSHOT.lib/some.lib-1.1.jar</Class-Path> 
         </manifestEntries> 

        </archive> 
       </configuration>    
</plugin> 
関連する問題