2015-04-09 9 views
7

मुझे अपने प्ले 2.3.8 परीक्षण रन से logback को छोड़कर वास्तव में कठिन समय है। मैंने कई नियमों को बाहर करने की कोशिश की है, लेकिन कुछ भी काम नहीं करता है। मैं इसे अपने निर्भरता पेड़ में भी नहीं ढूंढ सकता। मेरी एसबीटी फ़ाइल से स्निपेट:प्लेबैक को छोड़कर 2.3.8 एसबीटी खेलें

[...] 
resolvers ++= Seq(
    "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/", 
    "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/", 
    "Sonatype repo"     at "https://oss.sonatype.org/content/groups/scala-tools/", 
    "Sonatype releases"    at "https://oss.sonatype.org/content/repositories/releases", 
    "Sonatype snapshots"    at "https://oss.sonatype.org/content/repositories/snapshots", 
    "Sonatype staging"     at "http://oss.sonatype.org/content/repositories/staging", 
    "Java.net Maven2 Repository"  at "http://download.java.net/maven/2/", 
    "Twitter Repository"    at "http://maven.twttr.com", 
    "Websudos releases"    at "http://maven.websudos.co.uk/ext-release-local" 
) 

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
).map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

यह किसी कारण से निर्भरता पेड़ में नहीं है:

$ activator "inspect tree test" |grep -i qos |wc -l 
    0 
$ activator "inspect tree test" |grep -i logback |wc -l 
    0 

फिर भी, जब मैं परीक्षण चलाने के लिए, यह पता चलता है!

$ activator test 
[...] 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 

मैं अपने wits 'अंत में हूँ। मदद।

उत्तर

-1

ऐसा करने का एक बेहतर तरीका है। सबसे पहले आपको यह पहचानना चाहिए कि कौन सी निर्भरता पहली जगह में समस्या पैदा कर रही है।

plugins.sbt को यह करें:

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.5") 

अब आप एक नया आदेश एसबीटी में उपलब्ध है, अर्थात् whatDependsOn है। इस का उपयोग करना, आप कर सकते हैं परीक्षण:

whatDependsOn ch.qos.logback logback-classic 1.1.1

तब मैं ठीक उसी जगह पर निर्भरता को दूर करने, पूरे विन्यास मानचित्रण नहीं सुझाव है:

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion excludeAll(
     ExclusionRule(...) 
    ), 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 
) 
+0

मैंने प्लगइन को 0.7.4 से 0.7.5 तक अपग्रेड किया है, और अभी भी '[त्रुटि] वैध कमांड नहीं मिला है: whatDependsOn' – kumetix

+0

@kumetix इस तरह के कमांड का उपयोग करें:' sbt 'whatDependsOn ch.qos.logback लॉगबैक -classic 1.1.1'' इसमें बहुत अच्छा त्रुटि संदेश नहीं है, लेकिन यह –

+0

@flavian काम करता है यह अभी भी आपके उत्तर के लिए लॉगबैक-क्लासिक – Woodz

0

मैं ने पाया है कि में बहिष्करण चेनिंग libraryDependencies के अलावा काम नहीं करता है, यानी

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
).map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

इसके बजाय, गैर-दस्तावेजीका उपयोग कर बहिष्करण जोड़नेसमारोह (http://www.scala-sbt.org/0.13.12/api/index.html#sbt.SettingKey) नई निर्भरता को जोड़ने के बाद निम्न पंक्ति पर, यानी

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 

libraryDependencies ~= { _.map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

क्यों यह अलग व्यवहार देता है मैं नहीं जानता, लेकिन खेलने के फ्रेमवर्क 2.4.3 और एसबीटी 0.13.8 के साथ इस सफलतापूर्वक logback- शामिल नहीं क्लासिक और slf4j।

नोट आप श्रृंखला बाहर कर सकते हैं और excludeAll विधि बार-बार map तो अपने कोड को सरल किया जा सकता बुला से बचने के लिए कहता है कि:

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 

libraryDependencies ~= { _.map(_ 
    .exclude("org.slf4j", "slf4j-jdk14")) 
    .exclude("ch.qos.logback", "logback-classic")) 
} 

संपादित करें: आगे की जांच पड़ताल करने के बाद, मुझे विश्वास है कि यह आवश्यक है क्योंकि पहले से ही libraryDependencies Build.sbt फ़ाइल को पार्स करने से पहले प्ले प्लगइन से लॉगबैक-क्लासिक शामिल है। आप plugin.sbt में पुस्तकालयों को बहिष्कृत कर सकते हैं, लेकिन यदि आप enablePlugins(PlayScala) (https://www.playframework.com/documentation/2.5.x/NewApplication) द्वारा PlayScala प्लगइन का उपयोग कर रहे हैं, तो इसे बहिष्कृत नहीं किया जा सकता है, इसलिए आपको बहिष्करण अलग से जोड़ना होगा।

+0

thx को बाहर नहीं करता है। मेरे पास थोड़ी देर के लिए शुद्धता को सत्यापित करने के लिए समय नहीं होगा .. –