Gewusst wie: hinzufügen "zur Verfügung gestellt" Abhängigkeiten zurück zu laufen/test-tasks " classpath?
Hier ist ein Beispiel build.sbt
:
import AssemblyKeys._
assemblySettings
buildInfoSettings
net.virtualvoid.sbt.graph.Plugin.graphSettings
name := "scala-app-template"
version := "0.1"
scalaVersion := "2.9.3"
val FunnyRuntime = config("funnyruntime") extend(Compile)
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "provided"
sourceGenerators in Compile <+= buildInfo
buildInfoPackage := "com.psnively"
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, target)
assembleArtifact in packageScala := false
val root = project.in(file(".")).
configs(FunnyRuntime).
settings(inConfig(FunnyRuntime)(Classpaths.configSettings ++ baseAssemblySettings ++ Seq(
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "funnyruntime"
)): _*)
Ziel ist die spark-core "provided"
so es und seine Abhängigkeiten sind nicht in der assembly enthalten Artefakt, sondern reinclude Sie auf dem runtime classpath für die run
- und test
Aufgaben.
Scheint es, dass die Verwendung eines benutzerdefinierten Bereichs wird letztlich hilfreich sein, aber ich bin gehemmt, wie Sie tatsächlich dazu führen, dass die default/global run/test-Aufgaben zu verwenden, die benutzerdefinierte libraryDependencies
und hoffentlich, überschreiben die Standardeinstellung. Ich habe versucht Dinge, einschließlich:
(run in Global) := (run in FunnyRuntime)
und dergleichen ohne Erfolg.
Zusammenfassen: das kommt im wesentlichen eine Verallgemeinerung der web-Fall, in dem die servlet-api ist im "vorgesehenen" Rahmen, und führen/test-Aufgaben in der Regel Gabel ein servlet-container, der bietet wirklich das servlet-api zum ausführen von code. Der einzige Unterschied hier ist, dass ich nicht die Verzweigung aus einer separaten JVM/Umwelt; ich will nur manuell ergänzen die Aufgaben " klassenpfade, effektiv "rückgängig machen" der "vorgesehenen" Rahmen, aber in einer Weise, dass weiterhin auszuschließen, die Abhängigkeit von der Montage-Artefakt.
InformationsquelleAutor user2785627 | 2013-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen ähnlichen Fall habe ich in der Montage.sbt:
und jetzt das 'ausführen' - task verwendet alle Bibliotheken, darunter die Aufschrift "zur Verfügung gestellt". Keine weitere änderung notwendig war.
Update:
@rob Lösung scheint der einzige zu sein, arbeiten auf dem neuesten SBT-version, einfach auf
settings
imbuild.sbt
:Kann bestätigen, funktioniert nicht mit der neuesten IntelliJ. Mein workaround war, erstellen Sie einfach eine SBT-Konfiguration, die ich benutze, laufen & debug meinem lokalen spark app und Anruf ausführen-main-explizit etwa so:
"run-main MySparkDriverMainClass"
könnte Sie klären, was hast du gemacht damit es funktioniert? Ich bin kämpfen mit dem gleichen problem.
Eine Lösung, die Vermeidung der Verwendung von
<<=
was ist jetzt deprecated in sbt istfullClasspath in Runtime := (fullClasspath in Compile).value
Die Konfiguration, die für mich gearbeitet ist
run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)).evaluated
undrunMain in Compile := Defaults.runMainTask(fullClasspath in Compile, runner in(Compile, run)).evaluated
(SBT version 0.13.13)InformationsquelleAutor douglaz
Hinzufügen @douglaz' Antwort,
ist das entsprechende Update für die runMain Aufgabe.
Keine Ahnung warum IntelliJ nicht respektiert?
InformationsquelleAutor tgpfeiffer
Wenn Sie
sbt-revolver
plugin, hier ist eine Lösung für seinen "Neustart" Aufgabe:fullClasspath in Revolver.reStart <<= fullClasspath in Compile
UPD: für sbt-1.0 verwenden, können Sie den neuen Arbeitsauftrag bilden:
fullClasspath in Revolver.reStart := (fullClasspath in Compile).value
[error] /Users/irashid/github/pub/spark_streaming_demo/project/Build.scala:69: value fullClasspath is not a member of sbt.Def.Initialize[sbt.InputTask[Unit]] [error] possible cause: maybe a semicolon is missing before `value fullClasspath'? [error] fullClasspath in reStart <<= fullClasspath in Compile [error] ^ [error] one error found [error] (compile:compile) Compilation failed
. irgendwelche Vorschläge? Ich bin wahrscheinlich etwas fehlt einfach, aber versuchenreStart.fullClasspath
oderreStart::fullClasspath
oderRevolver.reStart::fullClasspath
alle geben einige FehlerIch habe versucht, es gerade jetzt, es funktioniert für mich. Ich benutze aber die
*.sbt
- Datei, nicht die veralteten Build.sbt. IDK. Vielleicht sind einige import fehlt?InformationsquelleAutor VasiliNovikov
Weitere option ist die Erstellung von separaten sbt-Projekte für die Montage von vs ausführen/testen. Dies erlaubt es Ihnen
sbt asseblyProj/assembly
zu bauen, ein fat-jar für die Bereitstellung von mit der Funke zu übermitteln, sowiesbt runTestProj/run
für die Ausführung direkt über die sbt mit Funke eingebettet ist. Als zusätzliche Vorteile, runTestProj funktioniert ohne änderungen in IntelliJ, und eine separate main-Klasse definiert werden können, für jedes Projekt, um Z. B. geben Sie die spark-master im code bei der Ausführung mit sbt.InformationsquelleAutor Ryan