21 Stimmen

Gibt es irgendwo eine Anleitung zu SBT für Nicht-Scala-Programmierer?

Eines Tages würde ich gerne Scala lernen. Was ich über die Sprache von Leuten sehe, die sie mögen, ist sehr ermutigend.

Heute ist jedoch nicht dieser Tag. Heute möchte ich nur einige Änderungen an der Build-Datei meines Teams vornehmen. Leider wurde diese Build-Datei mit SBT erstellt und ist nahezu unverständlich.

Mein Hauptproblem ist, dass ich den Eindruck habe, dass SBT eine riesige Sammlung neuer Operatoren einführt, die mit Zeichenketten und Listen arbeiten, um eine Art von sbt-Objekt zu erstellen. Zum Beispiel, in sbt:

"args4j" % "args4j" % "2.0.12"

Offensichtlich ist sie tatsächlich definiert; allerdings kann ich nicht einmal sagen, welcher Typ sie ist, wenn ich die scala repl, denn bei der repl bekomme ich den sinnvollen Fehler:

scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
       val tstcrap = "args4j" % "args4j" % "2.0.12"

Ich erhalte diesen Fehler auch nach dem Einrichten des Klassenpfads, um die sbt-launch.jar Datei und tun import sbt._ .

Auch ich habe mit solchen Dingen zu tun:

 val jarSources = (descendents(classesOutput ##, "*") ---
                  assemblyExclude(classesOutput ##))

Was ist das? ## Betreiber, was ist das? --- und, was noch wichtiger ist, was ist der Typ dieses Ausdrucks? Sind all diese neuen Operatoren irgendwo dokumentiert, und gibt es eine Möglichkeit, eine Scala-Replik zu erhalten, die dieselbe Sprache verwendet, die in den Sbt-Build-Dateien verwendet wird?

Ein Blick auf diese sbt Datei erinnert mich an den Versuch, die perl ohne jemals eine der einschlägigen Manpages gelesen zu haben. (Keine empfohlene Aktivität)

Update : Nach einem Blick auf die Links in der Antwort unten und auf andere Fragen und Antworten, die mit sbt Ich bin auf das wichtigste Stück Scala-Wissen gestoßen, das mir fehlte: Scala erlaubt es, implizite Konvertierungen zu definieren, die aufgerufen werden, bevor Methoden aufgelöst werden. In diesem Fall, sbt definiert innerhalb der ManagedProject Eigenschaft, eine implizite Umwandlung von String zur privaten Klasse sbt.GroupID , so dass

"a" % "b"

Ist wirklich etwas wie

(new GroupID("a")) % "b"

Ich stelle mir vor, dass die Auflösungsreihenfolge und andere Regeln rund um implizite Konvertierungen sehr kompliziert werden müssen; es erinnert mich fast an die Alpträume, die man in C++ mit Operator-Überladung einführen kann, wenn dies durch Nicht-Mitglieder-Funktionen geschieht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X