How to build, compile and run a Scala project?

11,293

Solution 1

As you've already noticed the project is managed by sbt.

In order to package a project, i.e. creating a jar with all the project artifacts that are supposed to be distributed, you execute package.

> package
[info] Updating {file:/Users/jacek/sandbox/TRank/}trank...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 13 Scala sources to /Users/jacek/sandbox/TRank/target/scala-2.10/classes...
[warn] there were 1 deprecation warning(s); re-run with -deprecation for details
[warn] one warning found
[info] Packaging /Users/jacek/sandbox/TRank/target/scala-2.10/trank_2.10-1.0.jar ...
[info] Done packaging.

By default sbt manages sources under src/main/scala directory. That's where you could find an App object to run.

In sbt, run searches all the sources under src/main/scala for applications.

> help run
Runs a main class, passing along arguments provided on the command line.

If a project has no main classes, the error is printed out:

> run
java.lang.RuntimeException: No main class detected.
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 0 s, completed Sep 24, 2014 9:40:52 PM

It does mean that the project has no main classes, but there are other ways to "prove" that an API works properly - using tests.

Execute test to fire the tests:

> test
[info] Compiling 5 Scala sources to /Users/jacek/sandbox/TRank/target/scala-2.10/test-classes...
[warn] there were 2 feature warning(s); re-run with -feature for details
[warn] one warning found
[info] ANC_DEPTHSpec:
[info] An ANC_DEPTH ranker
[info] - should rank types properly
[info] - should not fail when no types are provided
[info] ANCESTORSSpec:
[info] An ANCESTORS ranker
[info] - should rank types properly
[info] - should not fail when no types are provided
[info] DEPTHSpec:
[info] A DEPTH ranker
[info] - should rank types by maximum depth
[info] - should not fail when no types are provided
Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... [info] PreProcessorSpec:
[info] A PreProcessor
[info] - should remove boilerplate from HTML content
[info] - should leave intact textual content
[info] - should not fail with empty content
done [2.8 sec].
[info] NERSpec:
[info] A NER
[info] - should extract entity labels
[info] - should not fail with content without Named Entities
[info] - should not fail with empty content
[info] Passed: Total 12, Failed 0, Errors 0, Passed 12
[success] Total time: 4 s, completed Sep 24, 2014 9:42:09 PM

So, to learn the project you should review the sources of the tests (under src/test/scala) and a scaladoc that you can generate using doc task:

> doc
[info] Main Scala API documentation to /Users/jacek/sandbox/TRank/target/scala-2.10/api...
model contains 20 documentable templates
[info] Main Scala API documentation successful.
[success] Total time: 1 s, completed Sep 24, 2014 9:43:22 PM

You could also use console task to enter Scala REPL and play with the types yourself.

> console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_20).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

With the tests, the scaladoc and the Scala REPL, you should be all set to learn the API of the project.

Solution 2

TRank is a SBT project. You need to install SBT from this site http://www.scala-sbt.org/

Then you can build it like so:

sbt clean compile package

This will create a jar file for you in target/ folder. Once you get the jar file, you can use it just like you use Java Jar files ( except that you must use scala to include scala library jars automatically ):

scala -cp /path/to/trank_2.10-1.0.jar com.example.SomeMainClass
Share:
11,293
AhmadAssaf
Author by

AhmadAssaf

I am a creative enthusiast who always seeks new ideas and technologies and aims to enhance work efficiency and increase my knowledge, I am able to balance competing priorities and tight deadlines with quality, I am able to develop and deliver plans, create new ideas and find market niches. I am a fast learner who cannot get enough of learning; I have excellent analytical skills and keen to work under pressure. I am always keen to work in different projects especially those who allow me the chance to learn.

Updated on June 11, 2022

Comments

  • AhmadAssaf
    AhmadAssaf almost 2 years

    I would like to evaluate a Scala project that I have found on Github, namely TRank.

    I found the build file build.sbt. I managed to install Scala and sbt via homebrew and then run the command sbt run on the project root folder. Doing so ended up with an error:

    java.lang.RuntimeException: No main class detected.
        at scala.sys.package$.error(package.scala:27)
    

    Now the project files are in the src/main/scala/io/mem0r1es/trank and when I try to compile via scalac or run sbt run there I get a bunch of errors about objects not being members of the base packaged i.e. object ranking is not a member of package io.mem0r1es.trank

    I would greatly appreciate some help knowing how to run this Scala project.