typesafehub / sbt-multi-jvm Goto Github PK
View Code? Open in Web Editor NEWMulti-JVM testing in sbt
Multi-JVM testing in sbt
need some equivalent of
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
to allow running multi-jvm tests in eclipse and idea
In sbt-0.13 (and sbt-multi-jvm 0.3.8), we should set parallelExecution flag to false in the Global context:
parallelExcecution in Global := false
Without this setting, it looks like multiple compilation tasks run simultaneously and it causes an exeception described as below:
java.lang.RuntimeException: Could not create directory target/classes.bak
at scala.sys.package$.error(package.scala:27)
at sbt.IO$.createDirectory(IO.scala:155)
at sbt.inc.ClassfileManager$$anonfun$transactional$1$$anon$2.<init>(ClassfileManager.scala:37)
at sbt.inc.ClassfileManager$$anonfun$transactional$1.apply(ClassfileManager.scala:33)
at sbt.inc.ClassfileManager$$anonfun$transactional$1.apply(ClassfileManager.scala:33)
Hi,
I'm using Play 2.x + Akka 2.2.1's clustering solution and discovered that it doesn't work well as the output from the Tests in SBT 0.13 differs from SBT 0.12 and like to raise the possibility of support for SBT 0.13 moving forward.
I have several integration test helpers in src/it/scala that I would like to use in multijvm tests as well.
Is there a way to do this? If not can one be added?
On some operating systems the command line limit can be reached with the long classpath argument passed to scalatest. Support running from a temporary script file to work around this.
A project that uses an sbt-assembly plugin version 0.9.0 will conflict with multi-jvm internal version of 0.8.5 with the following exception:
java.lang.NoSuchMethodError: sbtassembly.Plugin$AssemblyKeys$.outputPath()Lsbt/SettingKey;
at com.typesafe.sbt.SbtMultiJvm$.internalMultiJvmSettings(SbtMultiJvm.scala:110)
at com.typesafe.sbt.SbtMultiJvm$.multiJvmSettings(SbtMultiJvm.scala:78)
at BuildSettings$.multiJvmSettings(Build.scala:16)
at BuildSettings$.(Build.scala:30)
at BuildSettings$.(Build.scala)
at RedisFailover$$anonfun$redisFailover$1.apply(Build.scala:71)
at RedisFailover$$anonfun$redisFailover$1.apply(Build.scala:71)
at RedisFailover$$anonfun$redisFailover$8.apply(Build.scala:71)
at RedisFailover$$anonfun$redisFailover$8.apply(Build.scala:71)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$$anonfun$settings$1.apply(Project.scala:60)
at sbt.Project$$anonfun$settings$1.apply(Project.scala:60)
at sbt.Project$$anonfun$settings$8.apply(Project.scala:60)
at sbt.Project$$anonfun$settings$8.apply(Project.scala:60)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$class.copy$default$6(Project.scala:37)
at sbt.Project$$anon$1.copy$default$6(Project.scala:154)
at sbt.Project$$anonfun$configs$4.apply(Project.scala:59)
at sbt.Project$$anonfun$configs$4.apply(Project.scala:59)
at sbt.Project$$anonfun$configs$8.apply(Project.scala:59)
at sbt.Project$$anonfun$configs$8.apply(Project.scala:59)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$class.copy$default$6(Project.scala:37)
at sbt.Project$$anon$1.copy$default$6(Project.scala:154)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$17.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$17.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$21.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$21.apply(Load.scala:370)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$$anonfun$resolveBuild$4.apply(Project.scala:52)
at sbt.Project$$anonfun$resolveBuild$4.apply(Project.scala:52)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$class.resolve(Project.scala:45)
at sbt.Project$$anon$1.resolve(Project.scala:154)
at sbt.Load$$anonfun$18.apply(Load.scala:383)
at sbt.Load$$anonfun$18.apply(Load.scala:383)
at scala.collection.immutable.MapLike$$anon$2$$anonfun$foreach$3.apply(MapLike.scala:109)
at scala.collection.immutable.MapLike$$anon$2$$anonfun$foreach$3.apply(MapLike.scala:109)
at scala.collection.immutable.Map$Map1.foreach(Map.scala:119)
at scala.collection.immutable.MapLike$$anon$2.foreach(MapLike.scala:109)
at scala.collection.TraversableLike$class.filter(TraversableLike.scala:251)
at scala.collection.immutable.MapLike$$anon$2.filter(MapLike.scala:108)
at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:203)
at sbt.Project$$anonfun$configs$8.apply(Project.scala:59)
at sbt.Project$$anonfun$configs$8.apply(Project.scala:59)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$class.copy$default$6(Project.scala:37)
at sbt.Project$$anon$1.copy$default$6(Project.scala:154)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$17.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$17.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$21.apply(Load.scala:370)
at sbt.Load$$anonfun$resolveBase$1$$anonfun$apply$21.apply(Load.scala:370)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$$anonfun$resolveBuild$4.apply(Project.scala:52)
at sbt.Project$$anonfun$resolveBuild$4.apply(Project.scala:52)
at sbt.Project$ProjectDef.settings(Project.scala:145)
at sbt.Project$class.resolve(Project.scala:45)
at sbt.Project$$anon$1.resolve(Project.scala:154)
at sbt.Load$$anonfun$18.apply(Load.scala:383)
at sbt.Load$$anonfun$18.apply(Load.scala:383)
at scala.collection.immutable.MapLike$$anon$2$$anonfun$foreach$3.apply(MapLike.scala:109)
at scala.collection.immutable.MapLike$$anon$2$$anonfun$foreach$3.apply(MapLike.scala:109)
at scala.collection.immutable.Map$Map1.foreach(Map.scala:119)
at scala.collection.immutable.MapLike$$anon$2.foreach(MapLike.scala:109)
at scala.collection.TraversableLike$class.filter(TraversableLike.scala:251)
at scala.collection.immutable.MapLike$$anon$2.filter(MapLike.scala:108)
at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:203)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:53)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:50)
at sbt.Using.apply(Using.scala:25)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:50)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:33)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:17)
at sbt.MainLoop$.runLogged(MainLoop.scala:13)
at sbt.xMain.run(Main.scala:26)
at xsbt.boot.Launch$.run(Launch.scala:55)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
at xsbt.boot.Launch$.launch(Launch.scala:69)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Boot$.runImpl(Boot.scala:31)
at xsbt.boot.Boot$.main(Boot.scala:20)
at xsbt.boot.Boot.main(Boot.scala)
at SbtJansiLaunch.main(SbtJansiLaunch.java:4)
[error] java.lang.NoSuchMethodError: sbtassembly.Plugin$AssemblyKeys$.outputPath()Lsbt/SettingKey;
While upgrading to a newer version of a dependency, we ran in to the problem that the multijvm plugin uses the sbt-assembly plugin to produce a test jar and that assembly plugin throws an error dealing with merging files.
This is the error we got:
[error] (rebb-multijvm-test/multi-jvm:assembly) deduplicate: different file contents found in the following:
[error] /Users/age/.ivy2/cache/io.netty/netty/bundles/netty-3.8.0.Final.jar:META-INF/maven/io.netty/netty/pom.properties
[error] /Users/age/.ivy2/cache/com.datastax.cassandra/cassandra-driver-core/bundles/cassandra-driver-core-2.1.4.jar:META-INF/maven/io.netty/netty/pom.properties
[error] (rebb-shopper/multi-jvm:assembly) deduplicate: different file contents found in the following:
[error] /Users/age/.ivy2/cache/com.datastax.cassandra/cassandra-driver-core/bundles/cassandra-driver-core-2.1.4.jar:META-INF/maven/io.netty/netty/pom.properties
[error] /Users/age/.ivy2/cache/io.netty/netty/bundles/netty-3.8.0.Final.jar:META-INF/maven/io.netty/netty/pom.properties
The problem is that there is no way to override the merge strategies used internally by the multijvm plugin. The only options we had left was to not use that new version of our dependency or to fork the multijvm plugin.
Nested assembly config should be exposed for customization along with the other multijvm keys so that users can solve these issues.
To reproduce, clone https://github.com/hseeberger/demo-akka, start sbt 0.12.4 and execute:
multi-jvm:run name.heikoseeberger.demoakka.remoting.Ping
This will succeed. Then wait a couple of seconds, then hit ENTER in the sbt session:
> Exception in thread "Thread-1" java.io.IOException: Stream closed
at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:434)
at java.io.OutputStream.write(OutputStream.java:116)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.typesafe.sbt.multijvm.JvmIO$.read$1(Jvm.scala:125)
at com.typesafe.sbt.multijvm.JvmIO$.transfer(Jvm.scala:129)
at com.typesafe.sbt.multijvm.JvmIO$.connectSystemIn(Jvm.scala:113)
at com.typesafe.sbt.multijvm.JvmIO$$anonfun$input$1.apply(Jvm.scala:111)
at com.typesafe.sbt.multijvm.JvmIO$$anonfun$input$1.apply(Jvm.scala:111)
at sbt.SimpleProcessBuilder$$anonfun$run$1.apply$mcV$sp(ProcessImpl.scala:390)
at sbt.Spawn$$anon$3.run(ProcessImpl.scala:20)
I found no way of specifying some multi-jvm tests I don't want to run in a given session.
It would be great to be supported (or is there a work-around)?
I tried configuring the plugin with sbt 0.13.0 / scala 2.10.3 / plugin v 0.3.8 and run into an issue when attempting to run both all (multi-node-test) and an individual tests WRT merge strategy when it triggers multi-jvm:assembly (?)
I used the setup noted in http://doc.akka.io/docs/akka/snapshot/dev/multi-jvm-testing.html#multi-jvm-testing
[trace] Stack trace suppressed: run last multi-jvm:assembly for the full output.
error deduplicate: different file contents found in the following:
[error] /.ivy2/cache/org.eclipse.jetty/jetty-webapp/jars/jetty-webapp-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-xml/jars/jetty-xml-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-util/jars/jetty-util-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-servlet/jars/jetty-servlet-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-security/jars/jetty-security-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-server/jars/jetty-server-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty.orbit/javax.servlet/orbits/javax.servlet-3.0.0.v201112011016.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-continuation/jars/jetty-continuation-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-http/jars/jetty-http-8.1.10.v20130312.jar:about.html
[error] /.ivy2/cache/org.eclipse.jetty/jetty-io/jars/jetty-io-8.1.10.v20130312.jar:about.html
[error] Total time: 141 s, completed Nov 8, 2013 12:09:32 PM
s
I tried overriding the merge strategy with no joy. Is it me or just not yet working with 0.13.0?
Thanks!
sbt-multi-jvm sets some parameters to help akka multi-node-testing (http://doc.akka.io/docs/akka/current/dev/multi-node-testing.html).
In particular, however, it does not set multinode.server-port
. This means you cannot have 2 sbt processes running multi-node tests on the same machine, as they'll compete for port 4711.
This is of course especially bad on CI machines.
Could we somehow make this port configurable, to allow for example choosing a random one from a range? Or am I missing something entirely?
This plugin has moved homes and now lives in: https://github.com/sbt/sbt-multi-jvm
Our project is currently unable to upgrade to the latest version of the sbt-assembly plugin (0.12.0) because this plugin depends on an incompatibly old version (0.8.5). This will lead to the following exception when starting SBT:
java.lang.NoClassDefFoundError: sbtassembly/Plugin$
It would be great if this conflicting dependency would be removed or worked around so this plugin will not block projects from using the latest version of the sbt-assembly plugin.
sbt version: 0.13.7
java version: 1.8.0_25
Complete stack trace:
java.lang.NoClassDefFoundError: sbtassembly/Plugin$
at com.typesafe.sbt.SbtMultiJvm$.internalMultiJvmSettings(SbtMultiJvm.scala:78)
at com.typesafe.sbt.SbtMultiJvm$.multiJvmSettings$lzycompute(SbtMultiJvm.scala:76)
at com.typesafe.sbt.SbtMultiJvm$.multiJvmSettings(SbtMultiJvm.scala:76)
at Cluster$.clusterSettings$lzycompute(Cluster.scala:7)
at Cluster$.clusterSettings(Cluster.scala:7)
at Build$.rebbShopper$lzycompute(Build.scala:212)
at Build$.rebbShopper(Build.scala:203)
at Build$.rebbWebsite$lzycompute(Build.scala:287)
at Build$.rebbWebsite(Build.scala:281)
at Build$.rebbMultiJvmTest$lzycompute(Build.scala:257)
at Build$.rebbMultiJvmTest(Build.scala:253)
at Build$.root$lzycompute(Build.scala:42)
at Build$.root(Build.scala:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sbt.ReflectUtilities$$anonfun$allValsC$1$$anonfun$apply$2.apply(ReflectUtilities.scala:45)
at sbt.ReflectUtilities$$anonfun$allValsC$1$$anonfun$apply$2.apply(ReflectUtilities.scala:44)
at scala.Option$WithFilter.foreach(Option.scala:208)
at sbt.ReflectUtilities$$anonfun$allValsC$1.apply(ReflectUtilities.scala:44)
at sbt.ReflectUtilities$$anonfun$allValsC$1.apply(ReflectUtilities.scala:42)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at sbt.ReflectUtilities$.allValsC(ReflectUtilities.scala:42)
at sbt.ReflectUtilities$.allVals(ReflectUtilities.scala:61)
at sbt.Build$class.projects(Build.scala:13)
at Build$.projects(Build.scala:10)
at sbt.Build$class.projectDefinitions(Build.scala:12)
at Build$.projectDefinitions(Build.scala:10)
at sbt.Load$.sbt$Load$$projectsFromBuild(Load.scala:496)
at sbt.Load$$anonfun$27.apply(Load.scala:436)
at sbt.Load$$anonfun$27.apply(Load.scala:436)
at scala.collection.immutable.Stream.flatMap(Stream.scala:442)
at sbt.Load$.loadUnit(Load.scala:436)
at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:91)
at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:90)
at sbt.BuildLoader.apply(BuildLoader.scala:140)
at sbt.Load$.loadAll(Load.scala:334)
at sbt.Load$.loadURI(Load.scala:289)
at sbt.Load$.load(Load.scala:285)
at sbt.Load$.load(Load.scala:276)
at sbt.Load$.apply(Load.scala:130)
at sbt.Load$.defaultLoad(Load.scala:36)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$.process(Command.scala:92)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.State$$anon$1.process(State.scala:184)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.MainLoop$.next(MainLoop.scala:98)
at sbt.MainLoop$.run(MainLoop.scala:91)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)
at sbt.Using.apply(Using.scala:24)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
at sbt.MainLoop$.runLogged(MainLoop.scala:24)
at sbt.StandardMain$.runManaged(Main.scala:53)
at sbt.xMain.run(Main.scala:28)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
at xsbt.boot.Launch$.run(Launch.scala:109)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:18)
at xsbt.boot.Boot$.runImpl(Boot.scala:41)
at xsbt.boot.Boot$.main(Boot.scala:17)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.ClassNotFoundException: sbtassembly.Plugin$
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.typesafe.sbt.SbtMultiJvm$.internalMultiJvmSettings(SbtMultiJvm.scala:78)
at com.typesafe.sbt.SbtMultiJvm$.multiJvmSettings$lzycompute(SbtMultiJvm.scala:76)
at com.typesafe.sbt.SbtMultiJvm$.multiJvmSettings(SbtMultiJvm.scala:76)
at Cluster$.clusterSettings$lzycompute(Cluster.scala:7)
at Cluster$.clusterSettings(Cluster.scala:7)
at Build$.rebbShopper$lzycompute(Build.scala:212)
at Build$.rebbShopper(Build.scala:203)
at Build$.rebbWebsite$lzycompute(Build.scala:287)
at Build$.rebbWebsite(Build.scala:281)
at Build$.rebbMultiJvmTest$lzycompute(Build.scala:257)
at Build$.rebbMultiJvmTest(Build.scala:253)
at Build$.root$lzycompute(Build.scala:42)
at Build$.root(Build.scala:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sbt.ReflectUtilities$$anonfun$allValsC$1$$anonfun$apply$2.apply(ReflectUtilities.scala:45)
at sbt.ReflectUtilities$$anonfun$allValsC$1$$anonfun$apply$2.apply(ReflectUtilities.scala:44)
at scala.Option$WithFilter.foreach(Option.scala:208)
at sbt.ReflectUtilities$$anonfun$allValsC$1.apply(ReflectUtilities.scala:44)
at sbt.ReflectUtilities$$anonfun$allValsC$1.apply(ReflectUtilities.scala:42)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at sbt.ReflectUtilities$.allValsC(ReflectUtilities.scala:42)
at sbt.ReflectUtilities$.allVals(ReflectUtilities.scala:61)
at sbt.Build$class.projects(Build.scala:13)
at Build$.projects(Build.scala:10)
at sbt.Build$class.projectDefinitions(Build.scala:12)
at Build$.projectDefinitions(Build.scala:10)
at sbt.Load$.sbt$Load$$projectsFromBuild(Load.scala:496)
at sbt.Load$$anonfun$27.apply(Load.scala:436)
at sbt.Load$$anonfun$27.apply(Load.scala:436)
at scala.collection.immutable.Stream.flatMap(Stream.scala:442)
at sbt.Load$.loadUnit(Load.scala:436)
at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:91)
at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:90)
at sbt.BuildLoader.apply(BuildLoader.scala:140)
at sbt.Load$.loadAll(Load.scala:334)
at sbt.Load$.loadURI(Load.scala:289)
at sbt.Load$.load(Load.scala:285)
at sbt.Load$.load(Load.scala:276)
at sbt.Load$.apply(Load.scala:130)
at sbt.Load$.defaultLoad(Load.scala:36)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
at sbt.Command$.process(Command.scala:92)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
at sbt.State$$anon$1.process(State.scala:184)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.MainLoop$.next(MainLoop.scala:98)
at sbt.MainLoop$.run(MainLoop.scala:91)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)
at sbt.Using.apply(Using.scala:24)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
at sbt.MainLoop$.runLogged(MainLoop.scala:24)
at sbt.StandardMain$.runManaged(Main.scala:53)
at sbt.xMain.run(Main.scala:28)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
at xsbt.boot.Launch$.run(Launch.scala:109)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:18)
at xsbt.boot.Boot$.runImpl(Boot.scala:41)
at xsbt.boot.Boot$.main(Boot.scala:17)
at xsbt.boot.Boot.main(Boot.scala)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.