2016-01-06 7 views
8

Ausgehend von this question, ich möchte in der Lage sein, ein Projekt sbt auf zwei verschiedene Arten, d. H. Mit unterschiedlichen scalacOptions. Die Antwort auf die doppelten Fragen erklärt, warum die Einführung einer anderen Konfiguration nicht hilfreich ist, da Sie auch dedizierte Quellen benötigen.Wie erstelle ich eine separate Kompilieraufgabe ohne eine separate Konfiguration, aber verschiedene scalacOptions?

So. Aber ich nicht wollen dedizierte Quellen. Ich möchte genau die gleichen Quellen kompilieren, aber mit anderen Compiler-Einstellungen. So stelle ich mir vor die Lösung muss sein, eine neue Aufgabe stattdessen zu definieren, die die Kompilierung macht. Wie

val myCompile = taskKey[???]("Compiles my way") 

scalacOptions in MyCompile ++= Seq("-elide-below", "1") 

sollte ich dann den minimalen Aufwand die Standard compile Aufgabe mit einem separaten target Verzeichnis zu kopieren, und könnte das Futter als in ein myCompile:assembly ...? Wie würde ich das tun?

Antwort

2

tl; dr Verwenden Sie inspect, um den Rückgabetyp von compile zu lernen.

> inspect compile 
[info] Task: sbt.inc.Analysis 
... 

Damit sollten Sie folgendes in build.sbt haben:

val myCompile = taskKey[sbt.inc.Analysis]("Compiles my way") 
myCompile <<= compile in Compile 

scalacOptions in myCompile ++= Seq("-elide-below", "1") 
+0

Das nimmt die 'scalacOptions' nicht auf –

+0

Welchen Umfang gehören' scalacOptions'? Ich habe explizit 'scalacOptions in myCompile' in der Antwort verwendet? Möchten Sie ScapacOptionen anderer Bereiche hinzufügen? –

+0

Ich weiß es nicht. Aber "scalacOptions in myCompile" wird definitiv nicht von 'myCompile' übernommen, ich habe dies verifiziert (versuche' '-no-way" 'als Option hinzuzufügen und' sbt clean myCompile' auszuführen) –

0

Sie können immer noch eine separate Konfiguration verwenden und fügen Sie

sourceDirectory in MyCompile := (sourceDirectory in Compile).value 

src/main/* Quellen zu verwenden, wie in sbt compile tasks with different options.

Verwandte Themen