tl; डॉaggregate
का कारण बनता है कार्यों और योग के मॉड्यूल में निष्पादित किए जाने वाले सभी aggregate
घ एक जबकि dependsOn
एक क्लासस्पैट निर्भरता सेट करता है ताकि पुस्तकालय aggregate
आईएनजी मॉड्यूल के लिए दृश्यमान हों (compile
उर्फ पर कॉन्फ़िगरेशन के आधार पर उदाहरण में)।
मतभेदों का प्रदर्शन करने के लिए एक नमूना।
मैं निम्नलिखित build.sbt
(कुछ भी नहीं वाकई दिलचस्प) का उपयोग कर रहा:
lazy val a = project
lazy val b = project
lazy val c = project dependsOn b aggregate (a,b)
निर्माण तीन मॉड्यूल a
, b
, और पिछले c
परियोजना के साथ c
a
और b
के लिए एक समेकित होने की परिभाषित करता है। चौथा मॉड्यूल है - एक अंतर्निहित - जो सभी मॉड्यूल a
, b
, और c
समेकित करता है।
> projects
[info] In file:/Users/jacek/sandbox/aggregate-dependsOn/
[info] a
[info] * aggregate-dependson
[info] b
[info] c
जब मैं एक aggreate
ing मॉड्यूल में एक कार्य निष्पादित, कार्य aggregate
घ मॉड्यूल में क्रियान्वित किया जा रहा है।
> compile
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}b...
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}a...
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}aggregate-dependson...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}c...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[success] Total time: 0 s, completed Oct 22, 2014 9:33:20 AM
एक ही होता है जब मुझे लगता है कि बदले में होगा यह a
और b
के खिलाफ निष्पादित, लेकिन उच्च-स्तरीय परियोजना में नहीं c
में एक कार्य निष्पादित।
> show c/clean
[info] a/*:clean
[info] ()
[info] b/*:clean
[info] ()
[info] c/*:clean
[info] ()
[success] Total time: 0 s, completed Oct 22, 2014 9:34:26 AM
किसी कार्य के a
या b
में मार डाला है, यह केवल परियोजना के भीतर चलता है।
> show a/clean
[info]()
[success] Total time: 0 s, completed Oct 22, 2014 9:34:43 AM
होना या न होना एक कार्य aggregate
ing परियोजनाओं aggregate
कुंजी द्वारा नियंत्रित किया जाता में निष्पादित किया जाता है एक परियोजना और/या कार्य के दायरे वाला।
> show aggregate
[info] a/*:aggregate
[info] true
[info] b/*:aggregate
[info] true
[info] c/*:aggregate
[info] true
[info] aggregate-dependson/*:aggregate
[info] true
बदलें यह Aggregation में वर्णित हैं:
परियोजना में एकीकृत करने वाला कर रही है, इस मामले में जड़ परियोजना, आप प्रति-कार्य एकत्रीकरण नियंत्रित कर सकते हैं। (...) aggregate in
अपडेट अद्यतन कार्य के लिए कुल कुंजी है।
नीचे मैं c
मॉड्यूल और clean
कार्य तो clean
नहीं रह गया है aggregate
घ मॉड्यूल a
और b
में निष्पादित किया जाता है के लिए महत्वपूर्ण बदल रहा हूँ: c
के लिए
> set aggregate in (c, clean) := false
[info] Defining c/*:clean::aggregate
[info] The new value will be used by no settings or tasks.
[info] Reapplying settings...
[info] Set current project to aggregate-dependson (in build file:/Users/jacek/sandbox/aggregate-dependsOn/)
> show c/clean
[info]()
[success] Total time: 0 s, completed Oct 22, 2014 9:39:13 AM
अन्य कार्यों अप्रभावित रहे हैं और अभी भी निष्पादित c
में एक कार्य इसे aggregate
मॉड्यूल में चलाएगा:
> show c/libraryDependencies
[info] a/*:libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.4)
[info] b/*:libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.4)
[info] c/*:libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.4)
जबकि aggregate
एसबीटी कार्यों के लिए एक निर्भरता सेट ताकि वे अन्य aggregate
घ मॉड्यूल में निष्पादित हो, dependsOn
एक CLASSPATH निर्भरता, यानी dependsOn
एड मॉड्यूल में एक कोड दिख रहा है सेट dependsOn
एक ("नया" शब्द के लिए खेद है) ing में ।
मान लेते हैं b
इस प्रकार एक मुख्य उद्देश्य है दो:
object Hello extends App {
println("Hello from B")
}
सहेजें b/hello.scala
करने के लिए Hello
वस्तु है, यानी b
मॉड्यूल के तहत।
c
के बाद से dependsOn b
को परिभाषित किया गया था (ऊपर build.sbt
देखें), Hello
वस्तु b
में दिख रहा है (क्योंकि यह मॉड्यूल के अंतर्गत आता है), लेकिन यह भी c
में।
> b/run
[info] Running Hello
Hello from B
[success] Total time: 0 s, completed Oct 22, 2014 9:46:44 AM
> c/runMain Hello
[info] Running Hello
Hello from B
[success] Total time: 0 s, completed Oct 22, 2014 9:46:58 AM
(मैं अकेला run
रूप c
में runMain
उपयोग करने के लिए वर्ग है कि मैं व्याख्या नहीं कर सकते नहीं देख सकता था था)।
a
में काम चलाने के लिए कोशिश कर रहा java.lang.ClassNotFoundException: Hello
साथ समाप्त होता है के बाद से वर्ग मॉड्यूल में दिखाई नहीं है।
> a/runMain Hello
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}a...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Running Hello
[error] (run-main-6) java.lang.ClassNotFoundException: Hello
java.lang.ClassNotFoundException: Hello
at java.lang.ClassLoader.findClass(ClassLoader.java:530)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[trace] Stack trace suppressed: run last a/compile:runMain for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last a/compile:runMain for the full output.
[error] (a/compile:runMain) Nonzero exit code: 1
[error] Total time: 0 s, completed Oct 22, 2014 9:48:15 AM
build.sbt
में dependsOn b
करने के लिए a
पुन: निर्धारित करें और अपवाद गायब हो जाती है।
आपको आधिकारिक दस्तावेज़ीकरण में Multi-project builds पढ़ना चाहिए।
'निर्भर करता है' के लिए दस्तावेज़ के अनुसार: "यह उनको संकलित करते समय परियोजनाओं के बीच एक आदेश भी बनाता है; कोर को संकलित करने से पहले उपयोग को अद्यतन और संकलित किया जाना चाहिए।" क्या इसका मतलब यह निर्भर करता है कि प्रश्न में मॉड्यूल के लिए संकलन और अद्यतन कार्यों के लिए कुल योग का भी अर्थ है? या इसे 'कुल' का उपयोग करके अलग से व्यक्त किया जाना चाहिए? या कार्य निष्पादन के चयन के बजाय कार्य निष्पादन के आदेश पर कुल और निर्भरता के बीच व्यवहार में अंतर है? –
एक बहुत ही रोचक अवलोकन - 'निर्भर करता है' निर्भर परियोजनाओं पर एक प्रकार का 'कुल' सेट करता है, लेकिन केवल उन कार्यों के लिए जो उनके जार उपलब्ध कराते हैं ताकि वे क्लासस्पैट पर उपलब्ध हो सकें। यह 'संकलन' का मामला है, लेकिन 'test' नहीं है जो केवल' संकलित 'निष्पादित करेगा यदि यह पहले नहीं किया गया था। –