2016-04-02 14 views
3

javaおよびslf4jのいくつかの問題 アイデアを使用してプロジェクトを作成しても問題ありません。しかし、私がgradleで瓶を作ろうとする場合、私はいくつかの問題があります。原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory

build.gradle

group 'test.test' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
    compile 'org.slf4j:slf4j-api:1.7.20' 
    compile 'ch.qos.logback:logback-classic:1.1.7' 

} 


jar { 
    manifest { 
     attributes 'Main-Class': 'Test' 
    } 
} 

Test.java

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Test { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); 

    public static void main(String[] args) { 
     LOGGER.info("info"); 
    } 
} 

ターミナル:

gradle build 
java -jar target/HttpServer-1.0-SNAPSHOT.jar 

出力:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
     at HttpServerHH.Main.<clinit>(Main.java:15) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
     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) 
     ... 1 more 

私はgradle/maven(mvnパッケージ)と同じ問題を使用しようとしました。クラスパスにLoggerとLoggerFactoryが見つかりません。彼らは明らかにクラスパス上にないだから

答えて

3

太った瓶について覚えておいていただきありがとうございます。あなたのコメントは、Googleにしようとした後: "グラデルビルド脂肪の瓶"と私のbuild.gradleを変更した後

jar { 
    from { 
     configurations.compile.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
    manifest { 
     attributes 'Main-Class': 'Test' 
    } 
} 
1
dependencies { 
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2' 
    testCompile group: 'junit', name: 'junit', version: '4.+' 
    compile 'ch.qos.logback:logback-core:1.1.6' 
    compile 'ch.qos.logback:logback-classic:1.1.6' 
    compile 'org.slf4j:slf4j-api:1.7.18' 
} 
+0

ログバックコアがありませんでした。私の理解によると。また、依存関係をリフレッシュすると、プロジェクト - > Gradle->更新依存関係が右クリックされます。それはあなたのために働くはずです – Deepak

+0

同じ結果 – dmitryvim

2

JVMはクラスパス上の依存関係を見つけることができません。デフォルトではGradleとMavenはあなたのクラスだけをjarファイルに追加し、-cp引数を使って依存関係へのパスを手動で指定する必要があります。ファットジャーを構築したい場合は、ShadowJarをGradleに、ShadeをMavenに使用することができます。

関連する問題