Jestem nowy w scali, gdy próbuję wykonać aktualizację sbt, którą otrzymuję
[error] /home/workspace/Scala/SparkTwitterStreaming/project/project/build.scala:1: expected class or object definition
[error] name := "SparkTwitterStreaming"
[error] ^
[error] /home/workspace/Scala/SparkTwitterStreaming/project/project/build.scala:2: expected class or object definition
[error] version := "1.0"
[error] ^
[error] /home/workspace/Scala/SparkTwitterStreaming/project/project/build.scala:3: expected class or object definition
[error] scalaVersion := "2.11.6"
[error] ^
[error] /home/workspace/Scala/SparkTwitterStreaming/project/project/build.scala:5: expected class or object definition
[error] libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.6.2"
[error] ^
[error] /home/workspace/Scala/SparkTwitterStreaming/project/project/build.scala:6: expected class or object definition
[error] libraryDependencies += "com.typesafe" % "config" % "1.3.0"
[error] ^
[error] 5 errors found
build.scala
/ build.sbt
??
name := "SparkTwitterStreaming"
version := "1.0"
scalaVersion := "2.11.6"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.6.2"
libraryDependencies += "com.typesafe" % "config" % "1.3.0"
Odpowiedzi:
1 dla odpowiedzi № 1Wygląda na to, że jesteś zagubiony .scala
i .sbt
pliki. SBT umożliwia definiowanie kompilacji na dwa różne sposoby. .scala
pliki są, no cóż, zwykłymi plikami Scala, więc nie mogą mieć kodu (i name := "SparkTwitterStreaming"
itd. w SBT to tylko kod Scala) na najwyższym poziomie, musi znajdować się wewnątrz cechy / klasy / obiektu. Sam SBT zajmuje się pakowaniem .sbt
pliki w ten sposób.
SparkTwitterStreaming/project/project/build.scala
też wygląda źle: tam są przypadki w SBT, gdy używasz pliku w project/project
, ale to nie jest jeden z nich. Prawdopodobnie chcesz przenieść ten plik do SparkTwitterStreaming/build.sbt
.
2 dla odpowiedzi nr 2
Więc zasadniczo ... poprawny minimalny projekt sbt ma strukturę podobną do następującej,
YourProject
├── build.sbt
└── src
└── main
└── scala
└── Main.scala
I trochę bardziej szczegółowy projekt będzie taki,
SparkTwitterStreaming
├── build.sbt
├── project
│ ├── build.properties
│ └── plugins.sbt
└── src
└── main
└── scala
└── YouCode.scala
I minimalny build.sbt
wygląda jak,
name := "SparkTwitterStreaming"
version := "1.0"
scalaVersion := "2.11.6"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.6.2"
libraryDependencies += "com.typesafe" % "config" % "1.3.0"
Teraz niektórzy ludzie lubią korzystać build.scala
zamiast build.sbt
, w takim razie to build.scala
powinien znajdować się w środku SparkTwitterStreaming/project
informator.
SparkTwitterStreaming
├── project
│ ├── build.properties
│ ├── plugins.sbt
│ └── build.scala
└── src
└── main
└── scala
└── YouCode.scala
Również powyżej build.sbt
, ekwiwalent build.scala
będzie wyglądać jak,
import sbt._
import Keys._
object MyBuild extends Build { // <--- here MyBuild can be renamed to anything
// if you needed extra resolvers
val pResolvers = Seq(
"Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
)
val pDependencies = Seq(
"org.apache.spark" % "spark-core_2.11" % "1.6.2",
"com.typesafe" % "config" % "1.3.0"
)
val pBuildSettings = Seq (
name := "SparkTwitterStreaming",
version := "1.0",
scalaVersion := "2.11.6",
resolvers ++= pResolvers,
libraryDependencies ++= pDependencies
)
lazy val root = project.in(file(".")).settings(pBuildSettings)
}