tl; draggregate
görevler toplayarak modülde yürütülen ve tüm aggregate
d neden olur dependsOn
bir CLASSPATH bağımlılığı ayarlarken, kütüphaneler aggregate
ing modülüne görünür durumdadır (konfigürasyona bağlı olarak compile
veÖrnekte).
Farklılıkları göstermek için bir örnek.
aşağıdaki build.sbt
(gerçekten ilginç bir şey) kullanıyorum:
lazy val a = project
lazy val b = project
lazy val c = project dependsOn b aggregate (a,b)
build üç modül son c
projesi ile a
, b
ve c
a
ve b
için toplu bir olmak tanımlar. a
, b
ve c
modüllerini toplayan dördüncü modül var.
> projects
[info] In file:/Users/jacek/sandbox/aggregate-dependsOn/
[info] a
[info] * aggregate-dependson
[info] b
[info] c
Bir aggreate
ing modülünde bir görevi yürütmek
, görev
aggregate
d modüllerde yürütülecek gidiyor. Ben sırayla ancak üst düzey projede,
a
ve
b
karşı çalıştırır
c
bir görevi yürütmek zaman
> 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
aynı
olur.
> 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
veya b
içinde yürütülen bir görev en, sadece proje içinde çalışır
. Bir görev
aggregate
anahtarıyla kontrol edilir
aggregate
ing projelerde yürütülür olsun ya da olmasın
> show a/clean
[info]()
[success] Total time: 0 s, completed Oct 22, 2014 9:34:43 AM
bir proje ve/veya göreve kapsamlı.
> show aggregate
[info] a/*:aggregate
[info] true
[info] b/*:aggregate
[info] true
[info] c/*:aggregate
[info] true
[info] aggregate-dependson/*:aggregate
[info] true
Değişim bunu Aggregation açıklandığı gibi: projede
toplayarak yapıyor, bu durumda kök projesi, sen başına görev toplanmasını kontrol edebilirsiniz. (...) aggregate in
güncelleştirme, güncelleştirme görevinin kapsamındaki toplama anahtarıdır.Ben c
modülü ve böylece clean
artık aggregate
d modüllerinin a
ve b
çalıştırılır clean
görev için anahtar değiştiriyorum Aşağıda
: c
için
> 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
diğer görevleri etkilenmez ve hâlâ çalışıyor c
içinde bir görev
diğer
aggregate
d modüllerde idam böylece sbt görevler için bir bağımlılık setleri
aggregate
iken
, dependsOn
bir CLASSPATH'E bağımlılık, yani dependsOn
ed modülünde bir kod görünür setleri dependsOn
("yeni" kelimeleri için üzgün) birini ing içinde .
en şöyle
b
bir ana nesne olduğunu varsayalım:
object Hello extends App {
println("Hello from B")
}
kaydet b
modülüne altında b/hello.scala
için Hello
nesne, yani. c
yana
(modülün ait olduğu için), Hello
amacı, aynı zamanda c
içinde b
görülebilir (yukarıda build.sbt
bakınız) dependsOn b
şekilde tanımlanmıştır.
> 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
(ben açıklayamam sınıf göremiyordu yalnız
run
olarak
c
yılında
runMain
kullanmak zorunda kaldı). sınıf modülünde
görünmez olduğundan
a
görevi çalıştırmak çalışıyor
java.lang.ClassNotFoundException: Hello
ile biter.
> 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
yılında
dependsOn b
için
a
yeniden tanımla ve istisna kaybolur.
Resmi belgede Multi-project builds belgesini okumalısınız.
'dependsOn' belgesine göre: "Bu, aynı zamanda bunları derlerken projeler arasında bir sıralama yaratıyor; çekirdek derlenmeden önce bunların güncellenmesi ve derlenmesi gerekmektedir." Bu, dependOn'un, söz konusu modüller için derleme ve güncelleme görevlerini bir araya getirdiği anlamına mı geliyor? ya da bu 'toplu' kullanarak ayrı ayrı ifade edilmeli mi? Ya da, toplu yürütme ile görev arasındaki seçimdeki fark, görev yürütme seçiminden ziyade görev yürütme sırasını mı? –
Çok ilginç bir gözlem - 'dependsOn' bağımlı projelerde bir tür 'topak' oluşturuyor, ancak yalnızca kavanozlarını kullanılabilir kılan görevler için CLASSPATH'da kullanılabilir. Bu "derleme" durumunda, ancak daha önce yapılmadıysa sadece "derleme" yi çalıştıran "test" değil. –