Is Scala 3 Compatible with Maven?

646 views Asked by At

I am trying to get Maven to compile Scala 3, but I get weird stuff like

[INFO] --- scala-maven-plugin:4.5.4:compile (default) @ laboratory ---
[INFO] Using incremental compilation using Mixed compile order
[INFO] compiling 1 Scala source and 10 Java sources to C:\Users\ERIC\Documents\git\loom-lab\laboratory\target\classes ...
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\Scala\net\kolotyluk\loom\HelloScala.scala:<233..233>: '=' expected, but '{' found
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Context.java:<332..332>: unclosed string literal
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Context.java:<595..595>: unclosed string literal
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Context.java:<666..744>: '}' expected but eof found.
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Experiment04_PrimeThreads.java:<16902..16902>: unclosed string literal
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Experiment04_PrimeThreads.java:<17176..17176>: unclosed string literal
[ERROR] C:\Users\ERIC\Documents\git\loom-lab\laboratory\src\main\java\net\kolotyluk\loom\Experiment04_PrimeThreads.java:<28863..28870>: '}' expected but eof found.
[ERROR] 7 errors found

First of all, why are the .java files failing too?

The code for HelloScala.scala is

package net.kolotyluk.loom

import java.time.Instant
import java.util.concurrent.StructuredExecutor
import scala.util.Using

object HelloScala {
  def main(args: Array[String]) {
    Context.printHeader(HelloScala.getClass)

    val results =
      Using(StructuredExecutor.open("HelloScala")) { structuredExecutor =>
        val futureResults = (0 to 15).map { item =>
          println(s"item = $item, Thread ID = ${Thread.currentThread}")
          structuredExecutor.fork { () =>
            println(s"\ttask = $item, Thread ID = ${Thread.currentThread}")
            item
          }
        }
        futureResults.map(_.get)
      }

    println(results)
  }
}

And this compiles just fine using Scala 2.13, so the error message does not make sense.

As an aside, in IntelliJ, I cannot get Scala 3 to build, that fails for different reasons...

1

There are 1 answers

0
Kolmar On

The reason for the error in HelloScala.scala is that procedure syntax was dropped: https://docs.scala-lang.org/scala3/reference/dropped-features/procedure-syntax.html

Instead, use

def main(args: Array[String]): Unit = {