2017-02-21 21 views
0

EclipseでJavaプロジェクトを構築するためにGradleを使用しています。 gradle.buildは次のようになります。実行時に成功したGradleプロジェクトビルドでNoClassDefFoundErrorが生成される

apply plugin: 'java' 
repositories { 
    mavenCentral() 
} 
dependencies { 
    compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0' 
    compile group: 'org.reflections', name: 'reflections', version: '0.9.10' 
} 

Eclipseで実行すると、すべてのライブラリが正しく機能しています。しかし、時にはコマンドラインで作業することは便利です。コマンドラインで実行すると、ビルドに成功し、コードにそれらのライブラリからのインポートが含まれていても、ランタイムエラーException in thread "main" java.lang.NoClassDefFoundError: com/flowpowered/nbt/regionfile/SimpleRegionFileReaderが発生します。 gradlew build --refresh-dependenciesと一緒にクリーニングと再構築を試みましたが、同じランタイムエラーが発生しました。

ライブラリは実際にインポートされていないと思いますか?または、彼らはjavaプロジェクトがどこにあると思っているのか格納されていませんか?私はGradleに慣れていないので、これに関するアドバイスは大歓迎です。

答えて

2

投稿されたbuild.gradleファイルに基づいて、アプリケーションは実行可能なJARとしてパッケージ化されていません。

最初にapplicationプラグインを適用します。しかし、実行可能ファイルをすべての依存関係なしで単一のJARとして実行することができないため、これでは十分ではありません。 shadowプラグインも適用してください。

これらの2つのプラグインを使用すると、次のタスクにアクセスできるようになります:

  • run:Gradleののコマンドラインからアプリケーションを実行します。
  • runShadow:アプリケーションを実行しますが、コンパイルされたクラスとリソースとともに、すべての依存関係が単一のJARにパッケージされています。
  • shadowJarコンパイルされたクラスとすべての依存関係を持つ単一の "fat JAR"を作成します。

したがって、あなたのbuild.gradleこの

plugins { 
    id 'java' 
    id 'application' 
    id 'com.github.johnrengelman.shadow' version '1.2.4' 
} 
mainClassName = 'com.acme.YourMainClassName' 
repositories { 
    mavenCentral() 
} 
dependencies { 
    compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0' 
    compile group: 'org.reflections', name: 'reflections', version: '0.9.10' 
} 

プラグインのドキュメントのように見えることがあります。

0

別の解決策なしどのプラグインを使用しても実行可能な脂肪ジャーで終わる

関連する問題