Very slow startup after upgrade to Play 2.6.11

scala
sbt

(Bwbecker) #1

I’m in the process of upgrading my Play app from 2.4.11 to 2.6.11. Sometime during this process the start-up time of the app (in development; don’t know about production yet) increased substantially. Before, with SBT 0.13.15 and Play 2.4.11 it took about 5 seconds to launch SBT and read the project description. After a full compile, running “~run” took about 7 seconds to get the “server started” message.

After upgrading to SBT 0.13.17 and Play 2.6.11 it takes 170 seconds to read the project description (ie start timing when I enter “sbt” at the command line and stop when I get the sbt prompt). After a full compile, it takes about 285 seconds (nearly 5 minutes) to go from “~run” to “server started”.

A noticeable difference is that the upgraded project prints a report on possible library conflicts that the old version did not. Indeed, there is a long wait immediately before the first of those reports is printed.

If I change the old project to use SBT 0.13.17 instead of 0.13.15, cmd-line to prompt takes about 13 seconds (5 < 13 < 170) and “~run” to “server started” takes about 20 seconds (7 < 20 < 285). I get the conflicts report with a modest (but undesirable) increase in time.

I note in Activity Monitor that very little CPU is being used during most of those long waits. I’ve tried to use VisualVM on both projects to profile where the time goes but with no success. VisualVM says the app is unresponsive and asks if it can give up. Probably my in-expert use. I was trying to profile classes in sbt.**.

Rebooting my machine seemed to make a difference for one, maybe two, launches of SBT.

I’d appreciate any suggestions on how to proceed in unravelling this mystery.


(Rich Dougherty) #2

To debug further could you get timings for compile, stage and start? It may be easier to profile start than ~run because, in addition to starting the server, ~run also scans for file modifications. I think there can performance issues with this scanning on some platforms, e.g. macOS.

I assume your tests are all based on a warmed-up disk cache.


(Bwbecker) #3

In my earlier tests I removed all the compiled artifacts that I could find. Started sbt. Did a compile (1:07 vs. 1:17).

New test on SBT 0.13.17 and Play 2.6.11:

  1. Blow away all compiled artifacts
  2. Enter “sbt” at the command line; wait for sbt prompt – 2:53. The version conflict report was printed at about 2:50.
  3. Enter “compile” at the sbt prompt: 1:18 to get back to the prompt.
  4. Enter “stage”: Got an OutOfMemory Java heap space error after 4:23
  5. Enter “start”: Got an OutOfMemory GC overhead limit exceeded error after 3:45. Kicked me right out of SBT. Note that I did not restart SBT between steps 4 and 5.

Same as above on SBT 0.13.15 and Play 2.4.11:
1.
2. launch: 0:16
3. compile: 1:05
4. stage: 1:51
5. start: 0:32 to “Starting server” message

Regarding scanning for file modifications: your comment reminded me of https://groups.google.com/forum/#!msg/play-framework/u471jSLbSxs/0QdabNy6AgAJ. Implemented the suggestion there in the new project.

  1. launch: 3:02 (a little worse than before, but it needed to get a new library)
  2. compile: 1:15
  3. ~run: 1:20 to get “running application” message and 2:32 to get “server started message” – so an improvement over my previous test with SBT 0.13.17 and Play 2.6.11 but still substantially worse than my pre-upgrade experience.

For what it’s worth, the project has about 225 .scala files organized into five modules: one pure Scala.JS, 3 pure JVM, and one cross-platform.

Not sure what you mean by a “warmed-up disk cache”.

Thanks for your help.


(Will Sargent) #4

OutOfMemory Java heap space error

I suspect your JVM may be thrashing on memory.

Can you create a jvmopts file like so:

and then start SBT with the extra memory:

sbt -jvm-opts .jvmopts

That will at least help with the GC overhead limit.

Also, run sbt with Java Mission Control attached so you can see what’s happening internally. You can also attach a debugger if that helps.


(Rich Dougherty) #5

First @bwbecker, thanks for your fantastic report. It makes it really clear what you’re doing and what you’re seeing.

wait for sbt prompt – 2:53.

This seems like a really long time to me. sbt startup may include time to download sbt libraries, plugins, etc, but that should only happen on the first run. It also includes time to run all plugin code, execute plugins.sbt and resolve sbt settings.

Perhaps you could also try Eugene’s suggestion for debugging slow sbt startup:

Try creating project/debug.sbt :

logLevel := Level.Debug

and see what you find. Often it’s the compilation of the build files if you have project/*.scala .

Not sure what you mean by a “warmed-up disk cache”.

I mean that the first time you do an operation it needs to read info from disk into OS memory. The second time will be faster. E.g. if you restart your computer then do an sbt ;clean;compile twice, the first time is usually slower because it needs to read the sources files from disk. The second time will be faster because the OS has them in memory. This is invisible to sbt/Play so it needs to be accounted for when comparing tests. With the magnitude of the issues that you’re seeing I don’t think it will be a major factor.

@wsargent:

I suspect your JVM may be thrashing on memory.

I agree with this.


(Bwbecker) #6

Thanks for the suggestions, @richdougherty and @wsargent.

The conclusion of this long post is that I’m getting errors from (I think) some resolvers that aren’t in my SBT build file. I don’t know where the resolvers are coming from. I don’t get the errors on the Play 2.4.x version of this project. I speculate that waiting for the failed downloads is what leads to the longer launch time. I haven’t investigated the long time to go from entering “~run” to an operating server.

=========== The long form follows ================

I followed up on Will’s suggestions. Increasing the memory to the various 2G figures he suggested made no difference. Also tried 3G; no change.

Also fired up Java Mission Control and played with that for quite a while. Thanks for the suggestion! I was familiar with VirtualVM, but not JMC. JMC has obvious progressed way beyond VirtualVM.

I recorded a trace of the first three minutes – from launch to the prompt appearing. As before, this was with all compile artifacts blown away. What I learned:

  • With a “reserved heap” of 2G, the app only uses 512M. So I don’t think memory is the issue.
  • The trace of the CPU used shows a huge peak in the first 5 seconds, then very little activity for just over 2 minutes, and then another big spike. I believe the prompt appears right after that second big spike.
  • In the Threads tab, I expected to see a bunch of locks, but don’t. I don’t see anything in the “Contention” sub-tab. In the “Latencies” sub-tab I see lots of time (?) with threads in the PARKED state (just over 50%), the MONITOR WAIT state, and the SLEEP state.
  • In the I/O tab nothing shows for file read or write. There is activity for socket reads to repo.scala-sbt-dot-org (1 min 51 sec), dl.bintray-dot-com (7sec), and repo1.maven-dot-org (44ms). Nothing for socket writes.
  • In the Code tab there is no method that dominates. In fact, the sample count is often 1 and the largest sample count is 6, which makes me wonder if there’s a way to increase the sampling frequency.

Following up on Eugene’s suggestion of enabling debugging output is more interesting. There are 112 lines similar to

CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/wrappy/
CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/balanced-match/

Each line is repeated twice. repo.scala-sbt-dot-org and repo.typesafe-dot-com are the only two domains represented. I don’t see either of them anywhere in my project or plugins.

The debugging output to get to the prompt is 24178 lines long. Of those, nearly all (lines 15-23835) appear to deal with dependency resolution. A typical line looks like

dependency descriptor has been mediated: dependency: org.scala-lang#scala-compiler;2.10.7 {scala-tool=[default, optional(default)]} => dependency: org.scala-lang#scala-compiler;2.10.7 {scala-tool=[default, optional(default)]}

It would make sense that dependency resolution needs to happen again since I blew away all that info before launching. The troubling part is that doing the same steps on the old version of the project using Play2.4 and sbt 0.13.15 takes almost no time at all. It also prints 25,000 lines of debugging output (similar to the long-running version) that are almost exclusively concerned with dependency resolution.

One difference is that this one does not have the 112 ERROR lines that the first one did. I’m wondering if waiting for a response that doesn’t come is what chews up the time.

Here’s the debugging output associated with the first of those ERROR lines:

[info] Resolving org.webjars.npm#source-map;[0.5,0.6) ...
[debug] sbt-chain: Checking cache for: dependency: org.webjars.npm#source-map;[0.5,0.6) {compile=[compile(*), master(compile)], runtime=[runtime(*)]}
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[info] Resolving org.webjars.npm#source-map;[0.5,0.6) ...
[debug] sbt-chain-delegate: Checking cache for: dependency: org.webjars.npm#source-map;[0.5,0.6) {compile=[compile(*), master(compile)], runtime=[runtime(*)]}
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[debug] 		tried https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/source-map/[revision]/ivys/ivy.xml
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/source-map/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/source-map/
[debug] problem while listing resources in https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/source-map/ with typesafe-ivy-releases:
[debug]   java.io.IOException The HTTP response code for https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/source-map/ did not indicate a success. See log for more detail.
[debug] 	typesafe-ivy-releases: no ivy file found for org.webjars.npm#source-map;[0.5,0.6)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[debug] 		tried https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/source-map/[revision]/ivys/ivy.xml
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/source-map/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/source-map/
[debug] problem while listing resources in https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/source-map/ with sbt-plugin-releases:
[debug]   java.io.IOException The HTTP response code for https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/source-map/ did not indicate a success. See log for more detail.
[debug] 	sbt-plugin-releases: no ivy file found for org.webjars.npm#source-map;[0.5,0.6)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[debug] 		tried /Users/bwbecker/.ivy2/local/org.webjars.npm/source-map/[revision]/ivys/ivy.xml
[debug] 	local: no ivy file found for org.webjars.npm#source-map;[0.5,0.6)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#source-map;[0.5,0.6)
[debug] 		tried https://repo1.maven.org/maven2/org/webjars/npm/source-map/[revision]/source-map-[revision].pom
[debug] 	listing revisions from maven-metadata: https://repo1.maven.org/maven2/org/webjars/npm/source-map/maven-metadata.xml
[debug] 	public: found md file for org.webjars.npm#source-map;[0.5,0.6)
[debug] 		=> https://repo1.maven.org/maven2/org/webjars/npm/source-map/0.5.7/source-map-0.5.7.pom (0.5.7)
[debug] 	default-cache: revision in cache: org.webjars.npm#source-map;0.5.7
[info] 	found org.webjars.npm#source-map;0.5.7 in sbt-chain
[info] 	[0.5.7] org.webjars.npm#source-map;[0.5,0.6)
[debug] == resolving dependencies org.webjars.npm#clean-css;4.0.5->org.webjars.npm#source-map;[0.5,0.6) [compile->compile(*)]
[debug] == resolving dependencies org.webjars.npm#clean-css;4.0.5->org.webjars.npm#source-map;[0.5,0.6) [compile->runtime(*)]
[debug] == resolving dependencies org.webjars.npm#clean-css;4.0.5->org.webjars.npm#source-map;[0.5,0.6) [compile->compile]
[debug] == resolving dependencies org.webjars.npm#clean-css;4.0.5->org.webjars.npm#source-map;[0.5,0.6) [runtime->runtime(*)]
[debug] == resolving dependencies org.webjars.npm#clean-css;4.0.5->org.webjars.npm#source-map;[0.5,0.6) [runtime->compile]

Thanks again for your suggestions.


(Bwbecker) #7

In a clean play-scala-starter-example project:

  1. Change build.properties to use sbt 0.13.17.
  2. Add debug.sbt to project to enable debugging.
  3. Add addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.2") to plugins.sbt
  4. Run rm -r project/project/ target project/target to get rid of all compiled artifacts
  5. Run sbt | grep ERROR and you see four of the errors I’ve been seeing.
  6. Add addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.6") to plugins.sbt
  7. Run sbt | grep ERROR and you see all 112 of the errors I’ve been seeing.

Time to launch sbt goes up from 11 seconds to 52 seconds.


(Rich Dougherty) #8

Hi @bwbecker, thanks for the debugging and the recipe for reproducing.

Would you mind opening a bug report? This may be an issue with sbt, sbt-web, etc but we can track it in the playframework project.

Out of interest, do you get the same issue if you use only sbt-less or only sbt-jshint in your project or do you need a combination of both?


(Bwbecker) #9

I’ve already opened bug reports in sbt-less and sbt-jshint. Should I close those and open one in play framework?

In the sample project adding only sbt-less triggers 4 errors. Adding sbt-jshint results in 112. So I believe they are independent.

I suspect there are still remaining build-time issues to uncover.


(Rich Dougherty) #10

No it’s fine to have bug reports in those projects if you’ve already opened them. Thanks.


(Marcos Pereira) #11

Hi @bwbecker,

Another thing you can do to better understand the problem is run sbt with -Dsbt.task.timings=true flag, for example:

sbt -Dsbt.task.timings=true clean run

This should print something like:

Total time: 3093 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/*:update                           : 2645 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/compile:compileIncremental         :  246 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/*:dependencyPositions              :   79 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/compile:previousCompile            :   41 ms
  streams-manager                                                                                :   20 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/compile:compile::compilerReporter  :   18 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/*:ivyModule                        :   13 ms
  {file:/Users/marcospereira/.sbt/1.0/plugins/}global-plugins/compile:copyResources              :   11 ms
...

Detailing the timing for each task.


(Bwbecker) #12

@marcospereira – Thank you! This is the magic incantation I’ve desperately needed. I now know that web assets are my issue. I see timings like

  {file:/Users/bwbecker/oat/src/oat3/}oat/web-assets:assets: 41721.685532999996 ms
  {file:/Users/bwbecker/oat/src/oat3/}oat/web-assets:unmanagedResources: 9585.678673 ms

multiple times in my output.

Looks like it’s time for me to do some more reading on asset management.


(Marcos Pereira) #13

@bwbecker,

Do you have node installed and on your PATH? I think it will be used it available and it process assets faster, so maybe it is worth a try. For example, I was not able to reproduce the problem using play-scala-starter-example. Here is the output for me when running sbt -Dsbt.task.timings=true stage | grep -i web-assets (using sbt 0.13.17 and adding sbt-less plugin 1.1.2):

  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:less: 39.112004999999996 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webJars: 26.224228 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webExportedDirectory: 22.746717999999998 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:less::jstaskJsOptions: 11.35841 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:packageBin: 5.99097 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webExportedMappings: 2.075835 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:unmanagedResources: 1.8776899999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webJarsClassloader: 1.6033849999999998 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:less::managedSources: 1.398661 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:packageBin::mappings: 1.218203 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webAllPipelineStages: 0.705417 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:unmanagedSources: 0.6074539999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webInternalWebModules: 0.5425599999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:less::jstaskFileInputHasher: 0.522886 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:resources::mappings: 0.501663 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:exportedProducts: 0.199256 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:mappings: 0.169798 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webModules::mappings: 0.142809 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:sources::mappings: 0.115065 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:managedSources: 0.093134 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webDirectWebModules: 0.09153299999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webModules: 0.08223 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:managedResources: 0.08107099999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:less::sources: 0.07706199999999999 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:resources: 0.073975 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:sources: 0.056572 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:packageBin::packageConfiguration: 0.026813999999999998 ms
  {file:/Users/marcospereira/projects/play-scala-starter-example/}root/web-assets:webDeduplicators: 0.020727 ms

(Bwbecker) #14

@marcospereira, thanks for the follow-up.

I have multiple and (I believe) independent issues. The one related to sbt-less occurs during the startup of sbt when the project’s target directory is missing. This one isn’t that bothersome because sbt isn’t often started in that way.

To see this,

rm -r project/target/
sbt -Dsbt.task.timings=true stage | grep -e web-assets -e ERROR

with logLevel := Level.Debug.

My second issue is related to web-assets. I do have node installed and available on my path. I don’t know if it’s being invoked or not. I get timings similar to yours on the sample project. I think my issues on this one is that I’ve just been managing JS assets using npm and a symlink from public to node_modules. I’m now working on cleaning that up. I’m using scala.js, so trying to figure out the jsDependencies setting in the plugin.

I currently have jsDependencies += "org.webjars.npm" % "codemirror" % "5.25.2" / "CodeMirror", but get an error:

[trace] Stack trace suppressed: run last browser/compile:resolvedJSDependencies for the full output.
[error] (browser/compile:resolvedJSDependencies) org.scalajs.core.tools.jsdep.JSLibResolveException: Some references to JS libraries could not be resolved:
[error] - Missing JS library: CodeMirror
[error]   originating from: browser:compile
[error] Total time: 2 s, completed 23-Mar-2018 12:56:17 PM

(Marcos Pereira) #15

@bwbecker,

It would be better if you can create a small project that reproduces the problem. I can’t reproduce it using play-scala-starter. Here are the changes I’ve made:

diff --git a/project/build.properties b/project/build.properties
index 8b697bb..133a8f1 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1 @@
-sbt.version=1.1.0
+sbt.version=0.13.17
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 1ae01ab..e74e701 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,2 +1,4 @@
 // The Play plugin
+addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.2")
+
 addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.11")

(Bwbecker) #16

@marcospereira,

Just to be clear, I have (at least) two independent issues. From the diffs you’ve posted you’re looking at the first one in my previous post.

To reproduce, please do the following beyond what you’ve already done.

First, add the file project/debug.sbt containing

logLevel := Level.Debug

This is what produces the output that shows the error.

Second, I’d recommend using addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.6") instead of sbt-less. It produces more than 100 errors and the effect on SBT’s speed is much more apparent.

Third, make sure that project/target is missing. This error is about dependency resolution that happens at startup. It doesn’t occur on the second run unless you remove that target directory.

Summary:

(a contains a virgin clone of the sample project; stuff related to git removed manually)

scsmac081:sbt-load-bug bwbecker$ diff -r --new-file a b
diff -r --new-file a/project/build.properties b/project/build.properties
1c1
< sbt.version=1.1.1
---
> sbt.version=0.13.17
diff -r --new-file a/project/debug.sbt b/project/debug.sbt
0a1,2
> 
> logLevel := Level.Debug
\ No newline at end of file
diff -r --new-file a/project/plugins.sbt b/project/plugins.sbt
2a3,4
> 
> addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.6")
scsmac081:sbt-load-bug bwbecker$ 

Then

scsmac081:b bwbecker$ rm -r project/target
scsmac081:b bwbecker$ sbt -Dsbt.task.timings=true stage | grep -e ERROR -e web-assets
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/strip-json-comments/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/strip-json-comments/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/strip-json-comments/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/strip-json-comments/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/htmlparser2/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/htmlparser2/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/htmlparser2/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/htmlparser2/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/readable-stream/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/readable-stream/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/readable-stream/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/readable-stream/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/core-util-is/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/core-util-is/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/core-util-is/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/core-util-is/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/string_decoder/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/string_decoder/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/string_decoder/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/string_decoder/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/entities/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/entities/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/entities/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/entities/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domutils/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domutils/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domutils/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domutils/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/dom-serializer/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/dom-serializer/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/dom-serializer/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/dom-serializer/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domelementtype/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domelementtype/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domelementtype/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domelementtype/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domhandler/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/domhandler/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domhandler/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/domhandler/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/shelljs/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/shelljs/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/console-browserify/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/console-browserify/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/console-browserify/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/console-browserify/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/date-now/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/date-now/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/date-now/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/date-now/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/exit/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/exit/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/exit/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/exit/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/cli/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/cli/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/cli/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/cli/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/glob/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/glob/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/glob/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/glob/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/once/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/once/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/once/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/once/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/wrappy/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/wrappy/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/wrappy/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/wrappy/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inflight/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inflight/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inflight/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inflight/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/inherits/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/fs.realpath/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/fs.realpath/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/fs.realpath/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/fs.realpath/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/path-is-absolute/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/path-is-absolute/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/path-is-absolute/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/path-is-absolute/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/minimatch/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/minimatch/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/minimatch/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/minimatch/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/brace-expansion/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/brace-expansion/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/brace-expansion/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/brace-expansion/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/balanced-match/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/balanced-match/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/balanced-match/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/balanced-match/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/lodash/
[debug] CLIENT ERROR: Not Found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/lodash/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/lodash/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/lodash/
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:jshint: 38.689571 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webJars: 28.317473999999997 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webExportedDirectory: 4.243421 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:packageBin: 1.5599649999999998 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webAllPipelineStages: 1.477644 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:exportedProducts: 1.200957 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:unmanagedResources: 1.124395 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webJarsClassloader: 1.100053 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webExportedMappings: 1.0954599999999999 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:jshint::managedSources: 1.081269 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webInternalWebModules: 0.730626 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:packageBin::mappings: 0.681847 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:jshint::jstaskFileInputHasher: 0.28182599999999997 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:unmanagedSources: 0.258635 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:resources::mappings: 0.215772 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webModules::mappings: 0.126534 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:sources::mappings: 0.115904 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webDirectWebModules: 0.101187 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:mappings: 0.09436699999999999 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:managedSources: 0.077495 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webModules: 0.07540999999999999 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:sources: 0.07184299999999999 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:managedResources: 0.056699 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:resources: 0.051089999999999997 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:jshint::sources: 0.050318999999999996 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:webDeduplicators: 0.022529 ms
  {file:/Users/bwbecker/temp/sbt-load-bug/b/}root/web-assets:packageBin::packageConfiguration: 0.012681999999999999 ms
scsmac081:b bwbecker$ 


(Marcos Pereira) #17

Hi @bwbecker,

I was able to reproduce the problem after adding sbt-jshint plugin. I think I know what is happening but didn’t have time to think about a possible solution. Here we go.

It all starts with sbt-jshint depending on "org.webjars.npm" % "jshint" % "2.9.3":

Let’s then take a look at the pom.xml for this dependency:

http://central.maven.org/maven2/org/webjars/npm/jshint/2.9.3/jshint-2.9.3.pom

Take a look at the <dependencies> section. You will see most of them are not using a closed revision, but instead a range (like [3.8,3.9)) for most of the dependencies, and if you inspect the pom.xml for the dependencies listed there, for example htmlparser2, you will see they are also using open range revisions.

Given that, sbt is checking the repositories each time to see if there is a new version that matches the range. We can confirm that by removing the target directories (I’m using find . -name target -type d -exec rm -r {} \;) and the running sbt clean stage | grep ERROR -B 20 -A 20:

[debug] problem while listing resources in https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/shelljs/ with typesafe-ivy-releases:
[debug]   java.io.IOException The HTTP response code for https://repo.typesafe.com/typesafe/ivy-releases/org.webjars.npm/shelljs/ did not indicate a success. See log for more detail.
[debug] 	typesafe-ivy-releases: no ivy file found for org.webjars.npm#shelljs;[0.3,0.4)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#shelljs;[0.3,0.4)
[debug] 		tried https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/[revision]/ivys/ivy.xml
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/
[debug] CLIENT ERROR: Not Found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/
[debug] problem while listing resources in https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/ with sbt-plugin-releases:
[debug]   java.io.IOException The HTTP response code for https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/ did not indicate a success. See log for more detail.
[debug] 	sbt-plugin-releases: no ivy file found for org.webjars.npm#shelljs;[0.3,0.4)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#shelljs;[0.3,0.4)
[debug] 		tried /Users/marcospereira/.ivy2/local/org.webjars.npm/shelljs/[revision]/ivys/ivy.xml
[debug] 	local: no ivy file found for org.webjars.npm#shelljs;[0.3,0.4)
[debug] default-cache: cached resolved revision expired for org.webjars.npm#shelljs;[0.3,0.4)
[debug] 		tried https://repo1.maven.org/maven2/org/webjars/npm/shelljs/[revision]/shelljs-[revision].pom
[debug] 	listing revisions from maven-metadata: https://repo1.maven.org/maven2/org/webjars/npm/shelljs/maven-metadata.xml
[debug] 	public: found md file for org.webjars.npm#shelljs;[0.3,0.4)
[debug] 		=> https://repo1.maven.org/maven2/org/webjars/npm/shelljs/0.3.0/shelljs-0.3.0.pom (0.3.0)
[debug] 	default-cache: revision in cache: org.webjars.npm#shelljs;0.3.0
[info] 	found org.webjars.npm#shelljs;0.3.0 in sbt-chain
[info] 	[0.3.0] org.webjars.npm#shelljs;[0.3,0.4)

At some point, we see the following line:

[debug] 	listing revisions from maven-metadata: https://repo1.maven.org/maven2/org/webjars/npm/shelljs/maven-metadata.xml

sbt is getting the artifact metadata to check the newest version that matches the revision range, in that case, 0.3.0, and than uses it as we can see:

[debug] 	public: found md file for org.webjars.npm#shelljs;[0.3,0.4)
[debug] 		=> https://repo1.maven.org/maven2/org/webjars/npm/shelljs/0.3.0/shelljs-0.3.0.pom (0.3.0)
[debug] 	default-cache: revision in cache: org.webjars.npm#shelljs;0.3.0
[info] 	found org.webjars.npm#shelljs;0.3.0 in sbt-chain
[info] 	[0.3.0] org.webjars.npm#shelljs;[0.3,0.4)

The whole process is repeated for each dependency added with a revision range for each resolver until the dependency is found. There is a lot of them based on the logs you sent here. All over the network.

Then it is slow.

I don’t know if sbt has a setting to avoid this behavior and use the local revision for dependencies using these ranges.

Hope this helps somehow.


(Rich Dougherty) #18

Nice work @marcospereira! A workaround then might be to find these revisions and hardcode fixed versions in as dependencies in your local project. This might stop sbt/Ivy from checking for the other versions.


(Bwbecker) #19

@marcospereira, @richdougherty: Thanks for the research. I have no doubt that the search for multiple versions is part of the issue – but I’m not convinced that’s the dominant issue.

In the many runs where I was watching the log file being printed, it seemed there was a noticeable pause around the printing of CLIENT ERROR. Sure enough, when I put https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/ into my browser and look at the network timings in Chrome’s dev tools, it takes 1.57sec to get a response that “The requested path was not found.” (using clear cache and hard reload).

Taking shelljs off of the path produces the same error. Remove org.webjars.npm and you finally get a response.

After the error at https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars.npm/shelljs/, sbt tries the local cache. Not finding it, it tries https://repo1.maven.org/maven2/org/webjars/npm/shelljs/[revision]/shelljs-[revision].pom. I don’t know how it fills in the [revision] in the URL, but if I shorten it to https://repo1.maven.org/maven2/org/webjars/npm/shelljs/ I get a response (with empty cache and hard reload) of only 16ms. That’s bloody fast compared to the 1.57sec for that first failed hit on https://repo.scala-sbt.org.

So my thought is that there’s simply an out-of-date URL being used. It shouldn’t looking at https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases because there is nothing useful there (for jshint’s purposes).

Another question is why https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/ (which redirects to https://dl.bintray.com/sbt/sbt-plugin-releases/) takes so long to respond in the first place.


(Rich Dougherty) #20

Thanks that’s interesting analysis. It’s possible that changing the value of the resolvers setting by removing anything unneeded my speed things up. Docs on resolvers. You could do something like:

// Remove some resolvers
resolvers := resolvers.value.filter(....)