2017-08-10 10 views
0

私はタイトル自体が説明的であると思いますが、私は挨拶サービスにjar(すなわち、エラー処理-service.jar)のいずれかを含めるようにしようとしています明確にすること。 ja。ビルド後、私は新しいプロジェクト(すなわち、TestApplication)での挨拶-service.jarを含むが、TestApplicationを実行する上で、私は(ところで、TestApplicationはGradleのプロジェクトではありません)のGradle:JARファイルのクラスパスにクラスを追加する

Exception in thread "main" java.lang.NoClassDefFoundError: co/common/exception/BaseException 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 

co.common.exceptionを取得しています。 BaseExceptionのクラスはエラー処理サービスモジュール

questionここにあります。私は、エラー処理サービス

buildscript { 
    repositories { 
     mavenCentral() 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'maven' 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    compile('org.apache.commons:commons-lang3:3.0') 
    compile('org.apache.commons:commons-collections4:4.0') 
    compile('org.slf4j:slf4j-api:1.7.25') 
    compile('co.common:error-handling-service:1.0.0-SNAPSHOT') 
    testCompile("org.mockito:mockito-all:1.9.5") 
    testCompile('junit:junit:4.12') 
} 

jar { 
    baseName = 'greeting-service' 
    version = '1.0.0-SNAPSHOT' 
    manifest { 
     attributes(
       "Manifest-Version": "1.0", 
       "Class-Path": configurations.compile.collect { it.getName() }.join(' ') 
     ) 
    } 
} 

group = 'co.common' 
version = '1.0.0-SNAPSHOT' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 


task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

に依存しているサービスの挨拶のbuild.gradleあるサービスを挨拶のビルドが成功した後、私はTestApplicationに挨拶-service.jarを含めここ

manifest { 
      attributes(
        "Manifest-Version": "1.0", 
        "Class-Path": configurations.compile.collect { it.getName() }.join(' ') 
      ) 
     } 

を含まそれでも私は上記と同じ例外を受けました。

Manifest-Version: 1.0 
Class-Path: commons-lang3-3.0.jar commons-io-2.4.jar commons-collections 
4-4.0.jar slf4j-api-1.7.25.jar error-handling-service-1.0.0-SNAPSHOT. 
jar commons-logging-1.1.3.jar 

どうしてこのようなことが起こりますか?

答えて

0

NoClassDefFoundError Javaの場合、Java Virtual Machineは実行時にコンパイル時に使用可能な特定のクラスを見つけることができません。たとえば、クラスからのメソッド呼び出し、またはクラスの静的メンバーへのアクセスがあり、そのクラスが実行時に使用できない場合、JVMはNoClassDefFoundErrorをスローします。

あなたのgradleビルドが成功したと仮定すると、私はco/common/exception/BaseExceptionクラスを含まないerror-handling-service-1.0.0-SNAPSHOT.jarが間違っていると結論づけることがあります。

この瓶の実際の内容を慎重に確認する必要があります。

+0

jarの内容には、error-handling-service-1.0.0-SNAPSHOT.jarのクラスが含まれていません。しかし、それは私の設定が良く見えるか、何かが欠けているのを知りたいのですか? –

+0

あなたのビルドファイルはokです。しかし、このエラーは 'co/common/exception/BaseException'クラスが見つからないことが原因です。したがって、このクラスの.jarファイルをビルドパスに含める必要があります。または、コードからこのクラスの使用法を削除することもできます。 'gradle dependencies'コマンドを使ってgradleプロジェクトの実際の依存関係を確認することができます –

0

これが役立つかどうかは不明ですが、あなたのerror-handling-service.jarがすでにパッケージ化されており、greeting-service.jarへの依存として含める準備ができている場合は、それを依存関係にするだけです。

例えば

プロジェクトで
  1. 、 "LIB" というフォルダを作成するには
  2. は "LIB" フォルダにエラー処理-service.jarを追加
  3. に以下を追加します。あなたの依存関係のブロック:

    依存関係{ fileTree(DIR: 'LIB'、含まれます:[ '* .jarファイルを'])コンパイル ... }

基本的に、 "lib"フォルダに入れたすべての* .jarは、ビルドを実行するときにアプリケーションのjarファイルに追加されます。

+0

greeting-service.jarのユーザーがgreeting-serviceの依存関係を再度含めることを避けたかったのです。私の瓶はプラグアンドプレイです。 –

関連する問題