0

I am new to Scala and SBT. I am getting NullPointerException please help.

.profile

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export PYSPARK_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export SPARK_HOME=/Softwares/spark
export R="/Library/Frameworks/R.framework/Resources"
export PATH=$PATH:$PYSPARK_PYTHON:$SPARK_HOME:$R

which scala

/usr/local/bin/scala

scala -version

cat: /release: No such file or directory
Scala code runner version 2.12.1 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.

which sbt

/usr/local/bin/sbt

sbt about This is sbt 0.13.13

I have created a folder FirstScala/src/main/First/First.scala containing the following

object First
{
    def main(args:Array[String]) {
        println("First Scala Hello World");
    }
}

build.sbt

name := "first_scala"

version := "1.0"

scalaVersion := "2.12.1"

Now in FirstScala folder I run sbt package. The .jar file gets generated. But when I run

scala target/scala-2.12/first_scala_2.12-1.0.jar 

I get the following error

java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at scala.reflect.internal.util.ScalaClassLoader.$anonfun$tryClass$1(ScalaClassLoader.scala:44)
at scala.util.control.Exception$Catch.$anonfun$opt$1(Exception.scala:242)
at scala.util.control.Exception$Catch.apply(Exception.scala:224)
at scala.util.control.Exception$Catch.opt(Exception.scala:242)
at scala.reflect.internal.util.ScalaClassLoader.tryClass(ScalaClassLoader.scala:44)
at scala.reflect.internal.util.ScalaClassLoader.tryToInitializeClass(ScalaClassLoader.scala:40)
at scala.reflect.internal.util.ScalaClassLoader.tryToInitializeClass$(ScalaClassLoader.scala:40)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.tryToInitializeClass(ScalaClassLoader.scala:129)
at scala.reflect.internal.util.ScalaClassLoader.run(ScalaClassLoader.scala:91)
at scala.reflect.internal.util.ScalaClassLoader.run$(ScalaClassLoader.scala:90)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:129)
at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:22)
at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:21)
at scala.tools.nsc.JarRunner$.run(MainGenericRunner.scala:13)
at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:29)
at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:28)
at scala.tools.nsc.JarRunner$.runAndCatch(MainGenericRunner.scala:13)
at scala.tools.nsc.JarRunner$.runJar(MainGenericRunner.scala:25)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:88)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:99)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:104)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

Thanks in Advance.

Abhilash D K
  • 1,223
  • 1
  • 23
  • 39
  • Use `sbt run` to run your code or `java` to run the .jar – nmat Mar 21 '17 at 17:26
  • This might be some OSX specific quirk, maybe try if [this helps](http://stackoverflow.com/questions/41193331/getting-cat-release-no-such-file-or-directory-when-running-scala). – MirMasej Mar 21 '17 at 17:34
  • I am new to JAVA too. How do I set up JAVA_HOME. which java gives me /usr/bin/java. In .profile should I set JAVA_HOME to /usr/bin/java. Previously I set JAVA_HOME= /usr and did export PATH=$PATH:$JAVA_HOME/bin. Then I was getting JAVA No Installed. So I removed it completely. – Abhilash D K Mar 21 '17 at 17:39

2 Answers2

4

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Milan Rakos
  • 1,705
  • 17
  • 24
2
  1. Change the directory structure so you have src/main/scala/First.scala, because by default sbt expects this directory structure.
  2. You need to specify the classpath and the name of the object to run (First).
  3. Run your project using sbt:

    sbt run
    [info] Loading global plugins from /dev/sw/.sbt/0.13/plugins
    [info] Set current project to first_scala (in build file:/dev/FirstScala/)
    [info] Running First
    First Scala Hello World
    [success] Total time: 0 s, completed Mar 21, 2017 2:33:29 PM
    

See an example of running the JAR using Java at http://alvinalexander.com/scala/how-to-run-scala-sbt-packaged-jar-file-with-java-command

You can also run the JAR using Scala, but you still need to specify the classpath and object name: http://alvinalexander.com/scala/how-to-run-scala-application-jar-files-set-classpath

radumanolescu
  • 4,059
  • 2
  • 31
  • 44
  • Actually it should work the way he set up the project, your link is about how to run Scala code with java. – MirMasej Mar 21 '17 at 17:32
  • 1
    I ran this scala -classpath "target/scala-2.12/first_scala_2.12-1.0.jar" First But getting No such file or class on classpath: First I have not set JAVA_HOME is that causing all these issues – Abhilash D K Mar 21 '17 at 17:47
  • I am getting No such file or class on classpath: First – Abhilash D K Mar 21 '17 at 17:50
  • Is your object in a package? If so, you must mention the package name (`scala -classpath ... com.abilash.First`). Also: update your original post with your newest attempts – radumanolescu Mar 21 '17 at 17:53
  • First.scala is in the following directory structure src/main/First/First.scala. First.scala contains the code I have posted above just object First {}. Could you please tell me what package should i use. I tried scala -classpath "target/scala-2.12/first_scala_2.12-1.0.jar" src.main.First also scala -classpath "target/scala-2.12/first_scala_2.12-1.0.jar" src.main.First.First same error still. Sorry for asking very basic things I am new to Scala or Java – Abhilash D K Mar 21 '17 at 18:00
  • @AbhilashDK I have reproduced your setup and made it work by changing the directory structure. See http://www.scala-sbt.org/0.13/docs/Directories.html – radumanolescu Mar 21 '17 at 18:52
  • @radumanolescu Thank you very much for the update on folder structure. Not only I am able to run using sbt run even scala target/scala-2.12/first_scala_2.12-1.0.jar also works. Thank you again for the support :) – Abhilash D K Mar 21 '17 at 19:39