2017-03-06 8 views
1

私のプロジェクトにbouncycastle providerライブラリを使用する必要があります。バーンシーキャスティングプロバイダを含むエラー

私はそれにgradleプロジェクトを含めました。

apply plugin: 'application' 
sourceCompatibility = '1.6' 
version = '1.0.0' 
mainClassName = 'path.to.main.file' 

    dependencies { 
     compile "org.mariadb.jdbc:mariadb-java-client:+" 
     compile "org.bouncycastle:bcprov-jdk16:+" 
     compile "commons-codec:commons-codec:+" 
     testCompile "junit:junit:+" 
    } 

プロジェクトが正常に構築されました。しかし、私がプロジェクトを実行しようとすると。私がそれを修正するにはどうすればよいbouncycastle

Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider 
    at com.example.Server.main(Server.java:50) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 6 more 

を見つけることができないのですか?

+0

間違った依存関係。 bcprov-jdk16はありません。それはあなたが間違っているbcprov-jdk15on –

+0

@ JamesKPolkする必要があります。バージョン1.46まで、何かが見つかりました。最近のバージョンでは、私はすでに以下のように書いています。 – Vampire

+0

問題を解決したソリューションはありますか? – Exception

答えて

1

はBouncyCastleはおそらく正しくアプリケーションを実行していないセキュリティプロバイダ

Security.addProvider(new BouncyCastleProvider()); 
+1

これはおそらく彼がやっていることであり、エラーを受けているときです。彼はおそらく走っているときに彼のクラスパスを設定していないでしょう。 – Vampire

+1

はい。私はそれをしました 'Security.addProvider(新しいorg.bouncycastle.jce.provider.BouncyCastleProvider()); ' – mjm

+0

@ヴァンパイアはい。あなたは確かに正しいです。 BouncyCastleプロバイダーを追加しないと、NoClassDefFoundエラーではなく "BC"プロバイダーが見つからないというエラーで失敗する –

2

として登録する必要があります。
作成したJARをjava -jar foo.jarで実行すると、実行時にすべての依存関係が失われます。
これらの依存関係をクラスパスに追加する必要があります。

これを行う方法はさまざまです。
E. g。すべての依存関係がいくつかのGradleプラグインを使って最終JARに再パックされた太ったJARを作成することができます(いくつかありますが、私はこの解決策がまったく嫌いです。
またはe。 g。 applicationプラグインを適用すると、runタスクを使用してアプリケーションを正しく実行し、distZipタスクを使用して、アプリケーションと既定の配布ZIP、ランタイムクラスパスを正しく設定するすべての依存関係と開始スクリプトを取得できます。
またはe。 g。手動でjava -cp foo.jar;other.jar;another.jar your.main.Classとしてください。

+0

質問を編集しました。それでも私は同じエラーが発生します。プラグインを 'application'にしてメインファイルへのパスを指定しました。 – mjm

+0

しかし、まだ 'java -jar foo.jar'をやっていますよね?これは私があなたに言ったことではなく、 'application'プラグインのドキュメンテーションがあなたに伝えるものです。 – Vampire

+0

私は 'Android'の' run'タスクを使ってアプリケーションを実行しています。 – mjm

関連する問題