/ / Scala Build nie działa? - scala, apache-iskra

Scala Build zawodzi? - scala, apache-spark

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 № 1

Wyglą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 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)
}