根据解释迁移到 scalajs 的基础知识的文章和这个关于交叉编译的页面的提示,我决定通过执行以下更改将交叉编译添加到我的独立无依赖 scala 库中:
- 我添加了一个包含内容
的文件project/plugins.sbt
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.16")
- 我在
build.sbt
中添加了scalaVersion in ThisBuild := "2.11.8"
,因为否则scalaVersion
正在使用2.10
我还在build.sbt
中添加了以下内容,以确保我可以保持相同的目录结构,因为我没有任何用于 JVM 或 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
但是现在,在我使用sbt publish-local
在本地发布项目后,依赖于该库的项目不再工作,即它们看不到该库提供的类并引发错误。 我研究了.ivy2/local/.../foo/0.1/jars
,JAR从1MB增加到1KB,所以错误是有道理的。
但是,如何确保 JVM jar 文件正确编译?
更多信息
罐子时间不再改变,看起来有一些错误编译。我删除了.ivy2
缓存,但现在sbt publish-local
总是成功完成,但不重新生成文件。
好的,我自己找到了解决方案。
我需要从构建中删除publishLocal := {}
,现在所有取决于我的库的项目都可以正常工作。