0

Following the hints of the post explaining the basics of migrating to scalajs and this page about cross-compilations, I decided to add cross compilation to my standalone dependency-free scala library by doing the following changes:

  • I added a file project/plugins.sbt with the content
    addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.16")
  • I added scalaVersion in ThisBuild := "2.11.8" in build.sbt because else just scalaVersion was using 2.10

I also added in the build.sbt the following content to ensure that I can keep the same directory structure, since I don't have any particular files for the JVM or for Javascript:

lazy val root = project.in(file(".")).
  aggregate(fooJS, fooJVM).
  settings(
    publish := {},
    publishLocal := {}
  )

lazy val foo = crossProject.crossType(CrossType.Pure).in(file(".")).
  settings(version := "0.1").
  jvmSettings(
    // Add JVM-specific settings here
  ).
  jsSettings(
    // Add JS-specific settings here
  )

lazy val fooJVM = foo.jvm
lazy val fooJS = foo.js

But now, after I published the project locally using sbt publish-local the projects depending on this library do not work anymore, i.e. they don't see the classes that this library was offering and raise errors. I looked into .ivy2/local/.../foo/0.1/jars and the JAR went from 1MB to 1KB, so the errors make sense.

However, how can I make sure the JVM jar file is compiled correctly?

Further informations

The jar time does not change anymore, it looks like there had been some miscompilation. I deleted the .ivy2 cache, but now sbt publish-local always finishes with success but does not regenerate the files.

Community
  • 1
  • 1
Mikaël Mayer
  • 10,425
  • 6
  • 64
  • 101

1 Answers1

0

Ok I found the solution myself.

I needed to remove the publishLocal := {} from the build, and now all the projects depending on my library work fine.

Mikaël Mayer
  • 10,425
  • 6
  • 64
  • 101