Repository: jooby-project/jooby
Pull request #1421 (2019-11-14 23:25:11)

Bump kotlin.version from 1.3.50 to 1.3.60
Bumps `kotlin.version` from 1.3.50 to 1.3.60.

Updates `kotlin-stdlib` from 1.3.50 to 1.3.60
<details>
<summary>Release notes</summary>

*Sourced from [kotlin-stdlib's releases](https://github.com/JetBrains/kotlin/releases).*

> ## Kotlin 1.3.50 EAP 3
> # CHANGELOG
> 
> ## 1.3.50
> 
> ### Compiler
> 
> - [`KT-12787`](https://youtrack.jetbrains.com/issue/KT-12787) Debugger: Generate line number at end of function (to set a breakpoint on the last line of the block)
> - [`KT-23675`](https://youtrack.jetbrains.com/issue/KT-23675) "Parameter specified as non-null is null: method org.jetbrains.kotlin.codegen.FrameMapBase.getIndex, parameter descriptor" when classes are defined inside an anonymous extension function and access a field of the extension function's `this` instance
> - [`KT-24596`](https://youtrack.jetbrains.com/issue/KT-24596) Refactor / Inline const property does not insert its value into usage in annotation
> - [`KT-25497`](https://youtrack.jetbrains.com/issue/KT-25497) kotlinx.serialization - throws Backend Internal error exception during code generation of sealed classes
> - [`KT-28927`](https://youtrack.jetbrains.com/issue/KT-28927) "IllegalStateException: Arrays of class literals are not supported yet" in AnnotationDeserializer.resolveArrayElementType
> - [`KT-31070`](https://youtrack.jetbrains.com/issue/KT-31070) IndexOutOfBoundsException in Analyzer with [@&#8203;JvmOverloads](https://github.com/JvmOverloads) constructor with 34+ parameters
> - [`KT-31265`](https://youtrack.jetbrains.com/issue/KT-31265) FIR: experimental compiler
> - [`KT-31535`](https://youtrack.jetbrains.com/issue/KT-31535) False positives from compiler warning IMPLICIT_NOTHING_AS_TYPE_PARAMETER
> - [`KT-31969`](https://youtrack.jetbrains.com/issue/KT-31969) NI: false positive USELESS_ELVIS with multiple elvis calls
> - [`KT-32044`](https://youtrack.jetbrains.com/issue/KT-32044) For loop over full UByte range terminates at UInt bound.
> - [`KT-25432`](https://youtrack.jetbrains.com/issue/KT-25432) No smartcast on qualifier expression of captured type
> - [`KT-30796`](https://youtrack.jetbrains.com/issue/KT-30796) psi2ir generates IrErrorType for elvis with generic type having nullable upper-bound when expected type is not nullable
> - [`KT-31242`](https://youtrack.jetbrains.com/issue/KT-31242) "Can't find enclosing method" proguard compilation exception with inline and crossinline
> - [`KT-31347`](https://youtrack.jetbrains.com/issue/KT-31347) "IndexOutOfBoundsException: Insufficient maximum stack size" with crossinline and suspend
> - [`KT-31367`](https://youtrack.jetbrains.com/issue/KT-31367) IllegalStateException: Concrete fake override public open fun (...)  defined in TheIssue[PropertyGetterDescriptorImpl@1a03c376] should have exactly one concrete super-declaration: []
> - [`KT-31734`](https://youtrack.jetbrains.com/issue/KT-31734) Empty parameter list required on Annotations of function types
> - [`KT-32434`](https://youtrack.jetbrains.com/issue/KT-32434) New type inference fails for Caffeine Cache
> - [`KT-32452`](https://youtrack.jetbrains.com/issue/KT-32452) Kotlin 1.3.40 - problem in IDE with new type inference and suspending method reference
> - [`KT-32407`](https://youtrack.jetbrains.com/issue/KT-32407) NI: "use property access syntax" intention causes freezes in editor
> - [`KT-33127`](https://youtrack.jetbrains.com/issue/KT-33127) Script result value is not calculated properly for the last expression
> - [`KT-33157`](https://youtrack.jetbrains.com/issue/KT-33157) Inline class with generic method is considered bad class by javac
> 
> ### Docs & Examples
> 
> - [`KT-16602`](https://youtrack.jetbrains.com/issue/KT-16602) Provide examples of sorting API usage
> - [`KT-32353`](https://youtrack.jetbrains.com/issue/KT-32353) Document order of array elements initialization
> 
> ### IDE
> 
> #### New Features
> 
> - [`KT-28098`](https://youtrack.jetbrains.com/issue/KT-28098) Insert space after automatically closed right brace of nested lambda to follow code style
> 
> #### Fixes
> 
> - [`KT-16476`](https://youtrack.jetbrains.com/issue/KT-16476) Extend selection (Select Word) doesn't select just KDoc if cursor is just before the KDoc
> - [`KT-21374`](https://youtrack.jetbrains.com/issue/KT-21374) Imports optimized tooltip is displayed, even if no changes were made
> - [`KT-21422`](https://youtrack.jetbrains.com/issue/KT-21422) IDE can't import class from root package
> - [`KT-27344`](https://youtrack.jetbrains.com/issue/KT-27344) MPP: jvmWithJava: no IDE module dependency is created between Kotlin test and Java main on import; Gradle build is successful
> - [`KT-29667`](https://youtrack.jetbrains.com/issue/KT-29667) Kotlin update settings has wrong looking text boxes for versions
> - [`KT-30133`](https://youtrack.jetbrains.com/issue/KT-30133) Update copyright creates duplicates for build.gradle.kts files
> - [`KT-30782`](https://youtrack.jetbrains.com/issue/KT-30782) 'Show Method Separators' does not separate expression body Kotlin functions
> - [`KT-31022`](https://youtrack.jetbrains.com/issue/KT-31022) `Quick definition` does not show Kotlin code in Java files
></tr></table> ... (truncated)
</details>
<details>
<summary>Changelog</summary>

*Sourced from [kotlin-stdlib's changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md).*

> # CHANGELOG
</details>
<details>
<summary>Commits</summary>

- See full diff in [compare view](https://github.com/JetBrains/kotlin/commits)
</details>
<br />

Updates `kotlin-stdlib-jdk8` from 1.3.50 to 1.3.60
<details>
<summary>Release notes</summary>

*Sourced from [kotlin-stdlib-jdk8's releases](https://github.com/JetBrains/kotlin/releases).*

> ## Kotlin 1.3.50 EAP 3
> # CHANGELOG
> 
> ## 1.3.50
> 
> ### Compiler
> 
> - [`KT-12787`](https://youtrack.jetbrains.com/issue/KT-12787) Debugger: Generate line number at end of function (to set a breakpoint on the last line of the block)
> - [`KT-23675`](https://youtrack.jetbrains.com/issue/KT-23675) "Parameter specified as non-null is null: method org.jetbrains.kotlin.codegen.FrameMapBase.getIndex, parameter descriptor" when classes are defined inside an anonymous extension function and access a field of the extension function's `this` instance
> - [`KT-24596`](https://youtrack.jetbrains.com/issue/KT-24596) Refactor / Inline const property does not insert its value into usage in annotation
> - [`KT-25497`](https://youtrack.jetbrains.com/issue/KT-25497) kotlinx.serialization - throws Backend Internal error exception during code generation of sealed classes
> - [`KT-28927`](https://youtrack.jetbrains.com/issue/KT-28927) "IllegalStateException: Arrays of class literals are not supported yet" in AnnotationDeserializer.resolveArrayElementType
> - [`KT-31070`](https://youtrack.jetbrains.com/issue/KT-31070) IndexOutOfBoundsException in Analyzer with [@&#8203;JvmOverloads](https://github.com/JvmOverloads) constructor with 34+ parameters
> - [`KT-31265`](https://youtrack.jetbrains.com/issue/KT-31265) FIR: experimental compiler
> - [`KT-31535`](https://youtrack.jetbrains.com/issue/KT-31535) False positives from compiler warning IMPLICIT_NOTHING_AS_TYPE_PARAMETER
> - [`KT-31969`](https://youtrack.jetbrains.com/issue/KT-31969) NI: false positive USELESS_ELVIS with multiple elvis calls
> - [`KT-32044`](https://youtrack.jetbrains.com/issue/KT-32044) For loop over full UByte range terminates at UInt bound.
> - [`KT-25432`](https://youtrack.jetbrains.com/issue/KT-25432) No smartcast on qualifier expression of captured type
> - [`KT-30796`](https://youtrack.jetbrains.com/issue/KT-30796) psi2ir generates IrErrorType for elvis with generic type having nullable upper-bound when expected type is not nullable
> - [`KT-31242`](https://youtrack.jetbrains.com/issue/KT-31242) "Can't find enclosing method" proguard compilation exception with inline and crossinline
> - [`KT-31347`](https://youtrack.jetbrains.com/issue/KT-31347) "IndexOutOfBoundsException: Insufficient maximum stack size" with crossinline and suspend
> - [`KT-31367`](https://youtrack.jetbrains.com/issue/KT-31367) IllegalStateException: Concrete fake override public open fun (...)  defined in TheIssue[PropertyGetterDescriptorImpl@1a03c376] should have exactly one concrete super-declaration: []
> - [`KT-31734`](https://youtrack.jetbrains.com/issue/KT-31734) Empty parameter list required on Annotations of function types
> - [`KT-32434`](https://youtrack.jetbrains.com/issue/KT-32434) New type inference fails for Caffeine Cache
> - [`KT-32452`](https://youtrack.jetbrains.com/issue/KT-32452) Kotlin 1.3.40 - problem in IDE with new type inference and suspending method reference
> - [`KT-32407`](https://youtrack.jetbrains.com/issue/KT-32407) NI: "use property access syntax" intention causes freezes in editor
> - [`KT-33127`](https://youtrack.jetbrains.com/issue/KT-33127) Script result value is not calculated properly for the last expression
> - [`KT-33157`](https://youtrack.jetbrains.com/issue/KT-33157) Inline class with generic method is considered bad class by javac
> 
> ### Docs & Examples
> 
> - [`KT-16602`](https://youtrack.jetbrains.com/issue/KT-16602) Provide examples of sorting API usage
> - [`KT-32353`](https://youtrack.jetbrains.com/issue/KT-32353) Document order of array elements initialization
> 
> ### IDE
> 
> #### New Features
> 
> - [`KT-28098`](https://youtrack.jetbrains.com/issue/KT-28098) Insert space after automatically closed right brace of nested lambda to follow code style
> 
> #### Fixes
> 
> - [`KT-16476`](https://youtrack.jetbrains.com/issue/KT-16476) Extend selection (Select Word) doesn't select just KDoc if cursor is just before the KDoc
> - [`KT-21374`](https://youtrack.jetbrains.com/issue/KT-21374) Imports optimized tooltip is displayed, even if no changes were made
> - [`KT-21422`](https://youtrack.jetbrains.com/issue/KT-21422) IDE can't import class from root package
> - [`KT-27344`](https://youtrack.jetbrains.com/issue/KT-27344) MPP: jvmWithJava: no IDE module dependency is created between Kotlin test and Java main on import; Gradle build is successful
> - [`KT-29667`](https://youtrack.jetbrains.com/issue/KT-29667) Kotlin update settings has wrong looking text boxes for versions
> - [`KT-30133`](https://youtrack.jetbrains.com/issue/KT-30133) Update copyright creates duplicates for build.gradle.kts files
> - [`KT-30782`](https://youtrack.jetbrains.com/issue/KT-30782) 'Show Method Separators' does not separate expression body Kotlin functions
> - [`KT-31022`](https://youtrack.jetbrains.com/issue/KT-31022) `Quick definition` does not show Kotlin code in Java files
></tr></table> ... (truncated)
</details>
<details>
<summary>Changelog</summary>

*Sourced from [kotlin-stdlib-jdk8's changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md).*

> # CHANGELOG
</details>
<details>
<summary>Commits</summary>

- See full diff in [compare view](https://github.com/JetBrains/kotlin/commits)
</details>
<br />

Updates `kotlin-reflect` from 1.3.50 to 1.3.60
<details>
<summary>Release notes</summary>

*Sourced from [kotlin-reflect's releases](https://github.com/JetBrains/kotlin/releases).*

> ## Kotlin 1.3.50 EAP 3
> # CHANGELOG
> 
> ## 1.3.50
> 
> ### Compiler
> 
> - [`KT-12787`](https://youtrack.jetbrains.com/issue/KT-12787) Debugger: Generate line number at end of function (to set a breakpoint on the last line of the block)
> - [`KT-23675`](https://youtrack.jetbrains.com/issue/KT-23675) "Parameter specified as non-null is null: method org.jetbrains.kotlin.codegen.FrameMapBase.getIndex, parameter descriptor" when classes are defined inside an anonymous extension function and access a field of the extension function's `this` instance
> - [`KT-24596`](https://youtrack.jetbrains.com/issue/KT-24596) Refactor / Inline const property does not insert its value into usage in annotation
> - [`KT-25497`](https://youtrack.jetbrains.com/issue/KT-25497) kotlinx.serialization - throws Backend Internal error exception during code generation of sealed classes
> - [`KT-28927`](https://youtrack.jetbrains.com/issue/KT-28927) "IllegalStateException: Arrays of class literals are not supported yet" in AnnotationDeserializer.resolveArrayElementType
> - [`KT-31070`](https://youtrack.jetbrains.com/issue/KT-31070) IndexOutOfBoundsException in Analyzer with [@&#8203;JvmOverloads](https://github.com/JvmOverloads) constructor with 34+ parameters
> - [`KT-31265`](https://youtrack.jetbrains.com/issue/KT-31265) FIR: experimental compiler
> - [`KT-31535`](https://youtrack.jetbrains.com/issue/KT-31535) False positives from compiler warning IMPLICIT_NOTHING_AS_TYPE_PARAMETER
> - [`KT-31969`](https://youtrack.jetbrains.com/issue/KT-31969) NI: false positive USELESS_ELVIS with multiple elvis calls
> - [`KT-32044`](https://youtrack.jetbrains.com/issue/KT-32044) For loop over full UByte range terminates at UInt bound.
> - [`KT-25432`](https://youtrack.jetbrains.com/issue/KT-25432) No smartcast on qualifier expression of captured type
> - [`KT-30796`](https://youtrack.jetbrains.com/issue/KT-30796) psi2ir generates IrErrorType for elvis with generic type having nullable upper-bound when expected type is not nullable
> - [`KT-31242`](https://youtrack.jetbrains.com/issue/KT-31242) "Can't find enclosing method" proguard compilation exception with inline and crossinline
> - [`KT-31347`](https://youtrack.jetbrains.com/issue/KT-31347) "IndexOutOfBoundsException: Insufficient maximum stack size" with crossinline and suspend
> - [`KT-31367`](https://youtrack.jetbrains.com/issue/KT-31367) IllegalStateException: Concrete fake override public open fun (...)  defined in TheIssue[PropertyGetterDescriptorImpl@1a03c376] should have exactly one concrete super-declaration: []
> - [`KT-31734`](https://youtrack.jetbrains.com/issue/KT-31734) Empty parameter list required on Annotations of function types
> - [`KT-32434`](https://youtrack.jetbrains.com/issue/KT-32434) New type inference fails for Caffeine Cache
> - [`KT-32452`](https://youtrack.jetbrains.com/issue/KT-32452) Kotlin 1.3.40 - problem in IDE with new type inference and suspending method reference
> - [`KT-32407`](https://youtrack.jetbrains.com/issue/KT-32407) NI: "use property access syntax" intention causes freezes in editor
> - [`KT-33127`](https://youtrack.jetbrains.com/issue/KT-33127) Script result value is not calculated properly for the last expression
> - [`KT-33157`](https://youtrack.jetbrains.com/issue/KT-33157) Inline class with generic method is considered bad class by javac
> 
> ### Docs & Examples
> 
> - [`KT-16602`](https://youtrack.jetbrains.com/issue/KT-16602) Provide examples of sorting API usage
> - [`KT-32353`](https://youtrack.jetbrains.com/issue/KT-32353) Document order of array elements initialization
> 
> ### IDE
> 
> #### New Features
> 
> - [`KT-28098`](https://youtrack.jetbrains.com/issue/KT-28098) Insert space after automatically closed right brace of nested lambda to follow code style
> 
> #### Fixes
> 
> - [`KT-16476`](https://youtrack.jetbrains.com/issue/KT-16476) Extend selection (Select Word) doesn't select just KDoc if cursor is just before the KDoc
> - [`KT-21374`](https://youtrack.jetbrains.com/issue/KT-21374) Imports optimized tooltip is displayed, even if no changes were made
> - [`KT-21422`](https://youtrack.jetbrains.com/issue/KT-21422) IDE can't import class from root package
> - [`KT-27344`](https://youtrack.jetbrains.com/issue/KT-27344) MPP: jvmWithJava: no IDE module dependency is created between Kotlin test and Java main on import; Gradle build is successful
> - [`KT-29667`](https://youtrack.jetbrains.com/issue/KT-29667) Kotlin update settings has wrong looking text boxes for versions
> - [`KT-30133`](https://youtrack.jetbrains.com/issue/KT-30133) Update copyright creates duplicates for build.gradle.kts files
> - [`KT-30782`](https://youtrack.jetbrains.com/issue/KT-30782) 'Show Method Separators' does not separate expression body Kotlin functions
> - [`KT-31022`](https://youtrack.jetbrains.com/issue/KT-31022) `Quick definition` does not show Kotlin code in Java files
></tr></table> ... (truncated)
</details>
<details>
<summary>Changelog</summary>

*Sourced from [kotlin-reflect's changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md).*

> # CHANGELOG
</details>
<details>
<summary>Commits</summary>

- See full diff in [compare view](https://github.com/JetBrains/kotlin/commits)
</details>
<br />

Updates `kotlin-maven-plugin` from 1.3.50 to 1.3.60

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

You can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)



</details>


Patch:
diff --git a/.github/workflows/full-build.yml b/.github/workflows/main.yml
similarity index 74%
rename from .github/workflows/full-build.yml
rename to .github/workflows/main.yml
index a9cf5cadd..1c97776af 100644
--- a/.github/workflows/full-build.yml
+++ b/.github/workflows/main.yml
@@ -1,15 +1,16 @@
-name: Full Build
+name: Java CI
 
-on: [push]
+on: [push, pull_request]
 
 jobs:
   build:
+
     runs-on: ${{ matrix.os }}
     strategy:
       fail-fast: false
       matrix:
         java_version: [1.8, 9, 10, 11, 12, 13]
-        os: [ubuntu-latest, windows-latest, macOS-latest]
+        os: [windows-latest, macOS-latest, ubuntu-latest]
 
     steps:
       - name: Checkout
@@ -19,7 +20,7 @@ jobs:
         with:
           java-version: ${{ matrix.java_version }}
       - name: Install
-        run: mvn -DskipTests=true clean install checkstyle:checkstyle -q -pl '!docs,!examples' -P checkstyle
+        run: mvn -DskipTests=true clean install -q -pl '!docs,!examples' -P checkstyle
       - name: Build
         run: mvn checkstyle:checkstyle package -pl '!docs,!examples' -P checkstyle
         env:
diff --git a/.github/workflows/quick-build.yml b/.github/workflows/quick-build.yml
deleted file mode 100644
index c52e91f09..000000000
--- a/.github/workflows/quick-build.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-name: Quick Build
-
-on: [pull_request]
-
-jobs:
-  build:
-
-    runs-on: ${{ matrix.os }}
-    strategy:
-      fail-fast: false
-      matrix:
-        java_version: [1.8]
-        os: [ubuntu-latest]
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-      - name: Set up JDK ${{ matrix.java_version }}
-        uses: actions/setup-java@v1
-        with:
-          java-version: ${{ matrix.java_version }}
-      - name: Install
-        run: mvn -DskipTests=true clean install checkstyle:checkstyle -q -pl '!docs,!examples' -P checkstyle
-      - name: Build
-        run: mvn checkstyle:checkstyle package -pl '!docs,!examples' -P checkstyle
-        env:
-          BUILD_PORT: 0
-          BUILD_SECURE_PORT: 0
diff --git a/jooby/pom.xml b/jooby/pom.xml
index 34feb6b02..e785579b5 100644
--- a/jooby/pom.xml
+++ b/jooby/pom.xml
@@ -273,7 +273,7 @@
     <dependency>
       <groupId>org.webjars.npm</groupId>
       <artifactId>vue</artifactId>
-      <version>2.6.10</version>
+      <version>2.5.22</version>
       <scope>test</scope>
     </dependency>
 
diff --git a/jooby/src/main/java/io/jooby/internal/SslPkcs12Provider.java b/jooby/src/main/java/io/jooby/internal/SslPkcs12Provider.java
index d55a32d43..ecbe3643b 100644
--- a/jooby/src/main/java/io/jooby/internal/SslPkcs12Provider.java
+++ b/jooby/src/main/java/io/jooby/internal/SslPkcs12Provider.java
@@ -13,6 +13,7 @@ import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import java.io.InputStream;
 import java.security.KeyStore;
+import java.security.SecureRandom;
 
 public class SslPkcs12Provider implements SslContextProvider {
 
@@ -29,7 +30,7 @@ public class SslPkcs12Provider implements SslContextProvider {
       kmf.init(store, options.getPassword().toCharArray());
       KeyManager[] kms = kmf.getKeyManagers();
       SSLContext context = SSLContext.getInstance("TLS");
-      context.init(kms, null, null);
+      context.init(kms, null, SecureRandom.getInstanceStrong());
       return context;
     } catch (Exception x) {
       throw SneakyThrows.propagate(x);
diff --git a/modules/jooby-bom/pom.xml b/modules/jooby-bom/pom.xml
index bb4017fd5..05e0f8427 100644
--- a/modules/jooby-bom/pom.xml
+++ b/modules/jooby-bom/pom.xml
@@ -36,16 +36,16 @@
   <guice.version>4.2.2</guice.version>
   <h2.version>1.4.200</h2.version>
   <handlebars.version>4.1.2</handlebars.version>
-  <hibernate.version>5.4.9.Final</hibernate.version>
+  <hibernate.version>5.4.8.Final</hibernate.version>
   <jackson-databind.version>2.10.0</jackson-databind.version>
-  <jackson.version>2.10.1</jackson.version>
+  <jackson.version>2.10.0</jackson.version>
   <jacoco-maven-plugin.version>0.8.5</jacoco-maven-plugin.version>
   <jacoco.version>0.8.5</jacoco.version>
   <jakarta.ws.rs-api.version>2.1.6</jakarta.ws.rs-api.version>
   <javax.inject.version>1</javax.inject.version>
   <jboss-modules.version>1.9.2.Final</jboss-modules.version>
   <jdbi.version>3.10.1</jdbi.version>
-  <jetty.version>9.4.22.v20191022</jetty.version>
+  <jetty.version>9.4.20.v20190813</jetty.version>
   <jfiglet.version>0.0.8</jfiglet.version>
   <jooby-maven-plugin.version>2.3.0</jooby-maven-plugin.version>
   <jooby.version>2.3.0</jooby.version>
@@ -53,7 +53,7 @@
   <jsonwebtoken.version>0.10.7</jsonwebtoken.version>
   <jsr305.version>3.0.2</jsr305.version>
   <junit.version>5.5.2</junit.version>
-  <kotlin.version>1.3.50</kotlin.version>
+  <kotlin.version>1.3.60</kotlin.version>
   <kotlinx-coroutines-core.version>1.3.2</kotlinx-coroutines-core.version>
   <license-maven-plugin.version>3.0</license-maven-plugin.version>
   <log4j.version>2.12.1</log4j.version>
@@ -71,7 +71,7 @@
   <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
   <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
   <maven-plugin-annotations.version>3.6.0</maven-plugin-annotations.version>
-  <maven-plugin-api.version>3.6.2</maven-plugin-api.version>
+  <maven-plugin-api.version>3.6.1</maven-plugin-api.version>
   <maven-plugin-plugin.version>3.6.0</maven-plugin-plugin.version>
   <maven-project.version>2.2.1</maven-project.version>
   <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
diff --git a/modules/jooby-cli/pom.xml b/modules/jooby-cli/pom.xml
index a701da324..cbe07fbf5 100644
--- a/modules/jooby-cli/pom.xml
+++ b/modules/jooby-cli/pom.xml
@@ -29,7 +29,7 @@
     <dependency>
       <groupId>info.picocli</groupId>
       <artifactId>picocli</artifactId>
-      <version>4.0.4</version>
+      <version>4.0.2</version>
     </dependency>
 
     <dependency>
@@ -42,7 +42,7 @@
     <dependency>
       <groupId>org.jline</groupId>
       <artifactId>jline</artifactId>
-      <version>3.13.1</version>
+      <version>3.12.1</version>
     </dependency>
 
     <!-- https://mvnrepository.com/artifact/org.json/json -->
diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java
index 6503b325d..f2e633830 100644
--- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java
+++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java
@@ -71,8 +71,7 @@ import static org.eclipse.jetty.http.HttpHeader.CONTENT_TYPE;
 import static org.eclipse.jetty.http.HttpHeader.SET_COOKIE;
 import static org.eclipse.jetty.server.Request.MULTIPART_CONFIG_ELEMENT;
 
-public class JettyContext implements DefaultContext {
-  private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(new byte[0]);
+public class JettyContext implements Callback, DefaultContext {
   private final int bufferSize;
   private final long maxRequestSize;
   private Request request;
@@ -378,7 +377,7 @@ public class JettyContext implements DefaultContext {
 
   @Nonnull @Override public Context send(StatusCode statusCode) {
     response.setStatus(statusCode.value());
-    send(EMPTY_BUFFER);
+    send(ByteBuffer.wrap(new byte[0]));
     return this;
   }
 
@@ -402,22 +401,19 @@ public class JettyContext implements DefaultContext {
   }
 
   @Nonnull @Override public Context send(@Nonnull ByteBuffer data) {
-    try {
-      responseStarted = true;
-      HttpOutput sender = response.getHttpOutput();
-      sender.sendContent(data);
-      return this;
-    } catch (IOException x) {
-      throw SneakyThrows.propagate(x);
-    } finally {
-      cleanup();
-    }
+    responseStarted = true;
+    HttpOutput sender = response.getHttpOutput();
+    sender.sendContent(data, this);
+    return this;
   }
 
   @Nonnull @Override public Context send(@Nonnull ReadableByteChannel channel) {
     responseStarted = true;
     ifSetChunked();
-    return sendStreamInternal(Channels.newInputStream(channel));
+    ifStartAsync();
+    HttpOutput sender = response.getHttpOutput();
+    sender.sendContent(channel, this);
+    return this;
   }
 
   @Nonnull @Override public Context send(@Nonnull InputStream in) {
@@ -433,6 +429,8 @@ public class JettyContext implements DefaultContext {
 
   private Context sendStreamInternal(@Nonnull InputStream in) {
     try {
+      ifStartAsync();
+
       long len = response.getContentLength();
       InputStream stream;
       if (len > 0) {
@@ -444,12 +442,10 @@ public class JettyContext implements DefaultContext {
         stream = in;
       }
       responseStarted = true;
-      response.getHttpOutput().sendContent(stream);
+      response.getHttpOutput().sendContent(stream, this);
       return this;
     } catch (IOException x) {
       throw SneakyThrows.propagate(x);
-    } finally {
-      cleanup();
     }
   }
 
@@ -459,8 +455,6 @@ public class JettyContext implements DefaultContext {
       return sendStreamInternal(Channels.newInputStream(file));
     } catch (IOException x) {
       throw SneakyThrows.propagate(x);
-    } finally {
-      cleanup();
     }
   }
 
@@ -479,6 +473,18 @@ public class JettyContext implements DefaultContext {
     return this;
   }
 
+  @Override public void succeeded() {
+    complete(null);
+  }
+
+  @Override public void failed(Throwable x) {
+    complete(x);
+  }
+
+  @Override public InvocationType getInvocationType() {
+    return InvocationType.NON_BLOCKING;
+  }
+
   @Override public String toString() {
     return getMethod() + " " + pathString();
   }
@@ -494,43 +500,25 @@ public class JettyContext implements DefaultContext {
         log.error("exception found while sending response {} {}", getMethod(), pathString(), x);
       }
     }
-
-    clearFiles();
-
-    try {
-      if (request.isAsyncStarted()) {
-        request.getAsyncContext().complete();
-      } else {
-        response.closeOutput();
-      }
-    } catch (IOException e) {
-      log.debug("exception found while closing resources {} {} {}", getMethod(), pathString(), e);
-    }
-  }
-
-  private void clearFiles() {
     if (files != null) {
       for (FileUpload file : files) {
         try {
           file.destroy();
         } catch (Exception e) {
-          router.getLog().debug("file upload destroy resulted in exception", e);
+          log.debug("file upload destroy resulted in exception", e);
         }
       }
       files.clear();
       files = null;
     }
-  }
-
-  private void cleanup() {
     try {
-      ifSaveSession();
-
-      clearFiles();
-    } finally {
       if (request.isAsyncStarted()) {
         request.getAsyncContext().complete();
+      } else {
+        response.closeOutput();
       }
+    } catch (IOException e) {
+      log.debug("exception found while closing resources {} {} {}", getMethod(), pathString(), e);
     }
   }
 
diff --git a/modules/jooby-utow/src/main/java/io/jooby/internal/utow/UtowWebSocket.java b/modules/jooby-utow/src/main/java/io/jooby/internal/utow/UtowWebSocket.java
index 4c8a42feb..25ea9d75f 100644
--- a/modules/jooby-utow/src/main/java/io/jooby/internal/utow/UtowWebSocket.java
+++ b/modules/jooby-utow/src/main/java/io/jooby/internal/utow/UtowWebSocket.java
@@ -31,7 +31,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 public class UtowWebSocket extends AbstractReceiveListener
     implements WebSocketConfigurer, WebSocket, WebSocketCallback<Void> {
@@ -46,7 +45,6 @@ public class UtowWebSocket extends AbstractReceiveListener
   private OnClose onCloseCallback;
   private OnError onErrorCallback;
   private String key;
-  private AtomicBoolean initialized = new AtomicBoolean();
 
   public UtowWebSocket(UtowContext ctx, WebSocketChannel channel) {
     this.ctx = ctx;
@@ -97,8 +95,7 @@ public class UtowWebSocket extends AbstractReceiveListener
           onError(channel, x);
         }
       } else {
-        onError(channel,
-            new IllegalStateException("Attempt to send a message on closed web socket"));
+        onError(channel, new IllegalStateException("Attempt to send a message on closed web socket"));
       }
     }
     return this;
@@ -145,31 +142,27 @@ public class UtowWebSocket extends AbstractReceiveListener
   }
 
   void fireConnect() {
-    // fire only once
-    if (initialized.compareAndSet(false, true)) {
-      try {
-        addSession(this);
-        Config conf = ctx.getRouter().getConfig();
-        long timeout = conf.hasPath("websocket.idleTimeout")
-            ? conf.getDuration("websocket.idleTimeout", TimeUnit.MINUTES)
-            : 5;
-        if (timeout > 0) {
-          channel.setIdleTimeout(TimeUnit.MINUTES.toMillis(timeout));
-        }
-        if (onConnectCallback != null) {
-          onConnectCallback.onConnect(this);
-        }
-        channel.getReceiveSetter().set(this);
-        channel.resumeReceives();
-      } catch (Throwable x) {
-        onError(channel, x);
+    try {
+      addSession(this);
+      Config conf = ctx.getRouter().getConfig();
+      long timeout = conf.hasPath("websocket.idleTimeout")
+          ? conf.getDuration("websocket.idleTimeout", TimeUnit.MINUTES)
+          : 5;
+      if (timeout > 0) {
+        channel.setIdleTimeout(TimeUnit.MINUTES.toMillis(timeout));
+      }
+      if (onConnectCallback != null) {
+        onConnectCallback.onConnect(this);
       }
+      channel.getReceiveSetter().set(this);
+      channel.resumeReceives();
+    } catch (Throwable x) {
+      onError(channel, x);
     }
   }
 
   @Override protected void onFullTextMessage(WebSocketChannel channel,
       BufferedTextMessage message) throws IOException {
-    fireConnect();
     if (onMessageCallback != null) {
       try {
         onMessageCallback.onMessage(this, WebSocketMessage.create(getContext(), message.getData()));
diff --git a/pom.xml b/pom.xml
index b3ed0e806..e376d5830 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
     <freemarker.version>2.3.29</freemarker.version>
     <handlebars.version>4.1.2</handlebars.version>
     <pebble.version>3.1.0</pebble.version>
-    <jackson.version>2.10.1</jackson.version>
+    <jackson.version>2.10.0</jackson.version>
     <jackson-databind.version>2.10.0</jackson-databind.version>
     <rocker.version>1.2.2</rocker.version>
 
@@ -29,7 +29,7 @@
     <mysql-connector-java.version>8.0.18</mysql-connector-java.version>
     <log4jdbc.version>1.2</log4jdbc.version>
     <h2.version>1.4.200</h2.version>
-    <hibernate.version>5.4.9.Final</hibernate.version>
+    <hibernate.version>5.4.8.Final</hibernate.version>
     <jdbi.version>3.10.1</jdbi.version>
     <flyway.version>6.0.8</flyway.version>
 
@@ -56,7 +56,7 @@
 
     <!-- Server -->
     <undertow.version>2.0.26.Final</undertow.version>
-    <jetty.version>9.4.22.v20191022</jetty.version>
+    <jetty.version>9.4.20.v20190813</jetty.version>
     <netty.version>4.1.43.Final</netty.version>
     <boringssl.version>2.0.27.Final</boringssl.version>
 
@@ -78,7 +78,7 @@
     <unbescape.version>1.1.6.RELEASE</unbescape.version>
 
     <!-- Kotlin -->
-    <kotlin.version>1.3.50</kotlin.version>
+    <kotlin.version>1.3.60</kotlin.version>
     <kotlinx-coroutines-core.version>1.3.2</kotlinx-coroutines-core.version>
 
     <!-- Test dependencies -->
@@ -110,11 +110,11 @@
     <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
     <maven-enforcer-plugin.version>3.0.0-M1</maven-enforcer-plugin.version>
     <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
-    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
+    <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
     <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
     <archetype-packaging.version>3.1.2</archetype-packaging.version>
     <maven-plugin-annotations.version>3.6.0</maven-plugin-annotations.version>
-    <maven-plugin-api.version>3.6.2</maven-plugin-api.version>
+    <maven-plugin-api.version>3.6.1</maven-plugin-api.version>
     <maven-plugin-plugin.version>3.6.0</maven-plugin-plugin.version>
     <maven-project.version>2.2.1</maven-project.version>
     <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
@@ -1092,7 +1092,7 @@
           <plugin>
             <groupId>org.codehaus.gmaven</groupId>
             <artifactId>groovy-maven-plugin</artifactId>
-            <version>2.1.1</version>
+            <version>2.1</version>
             <inherited>false</inherited>
             <executions>
               <execution>


Test patch:
diff --git a/jooby/src/test/java/io/jooby/internal/ClassPathAssetSourceTest.java b/jooby/src/test/java/io/jooby/internal/ClassPathAssetSourceTest.java
index b39a997bb..6bc27017d 100644
--- a/jooby/src/test/java/io/jooby/internal/ClassPathAssetSourceTest.java
+++ b/jooby/src/test/java/io/jooby/internal/ClassPathAssetSourceTest.java
@@ -3,12 +3,8 @@ package io.jooby.internal;
 import io.jooby.Asset;
 import io.jooby.AssetSource;
 import io.jooby.MediaType;
-import io.jooby.SneakyThrows;
 import org.junit.jupiter.api.Test;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
 import java.util.function.Consumer;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -19,7 +15,7 @@ public class ClassPathAssetSourceTest {
 
   @Test
   public void checkclasspathFiles() {
-    assetSource("/META-INF/resources/webjars/vue/" + VUE, source -> {
+    assetSource("/META-INF/resources/webjars/vue/2.5.22", source -> {
       Asset vuejs = source.resolve("dist/vue.js");
       assertNotNull(vuejs);
       assertEquals(MediaType.js, vuejs.getContentType());
@@ -32,7 +28,7 @@ public class ClassPathAssetSourceTest {
       assertNull(root);
     });
 
-    assetSource("/META-INF/resources/webjars/vue/" + VUE + "/dist", source -> {
+    assetSource("/META-INF/resources/webjars/vue/2.5.22/dist", source -> {
       Asset vuejs = source.resolve("vue.js");
       assertNotNull(vuejs);
       assertEquals(MediaType.js, vuejs.getContentType());
@@ -41,7 +37,7 @@ public class ClassPathAssetSourceTest {
       assertNull(root);
     });
 
-    assetSource("/META-INF/resources/webjars/vue/" + VUE + "/dist/vue.js", source -> {
+    assetSource("/META-INF/resources/webjars/vue/2.5.22/dist/vue.js", source -> {
       Asset vuejs = source.resolve("vue.js");
       assertNotNull(vuejs);
       assertEquals(MediaType.js, vuejs.getContentType());
@@ -58,17 +54,4 @@ public class ClassPathAssetSourceTest {
     AssetSource source = new ClassPathAssetSource(getClass().getClassLoader(), location);
     consumer.accept(source);
   }
-
-  private static final String VUE = vueVersion();
-
-  private static String vueVersion() {
-    try (InputStream vueprops = ClassPathAssetSourceTest.class.getClassLoader()
-        .getResourceAsStream("META-INF/maven/org.webjars.npm/vue/pom.properties")) {
-      Properties properties = new Properties();
-      properties.load(vueprops);
-      return properties.getProperty("version");
-    } catch (IOException x) {
-      throw SneakyThrows.propagate(x);
-    }
-  }
 }
diff --git a/tests/pom.xml b/tests/pom.xml
index 17c7e5aa8..9665bad34 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -137,7 +137,7 @@
     <dependency>
       <groupId>org.webjars.npm</groupId>
       <artifactId>vue</artifactId>
-      <version>2.6.10</version>
+      <version>2.5.22</version>
     </dependency>
   </dependencies>
 
diff --git a/tests/src/test/java/io/jooby/FeaturedTest.java b/tests/src/test/java/io/jooby/FeaturedTest.java
index 297eab0f5..4d6b6eabb 100644
--- a/tests/src/test/java/io/jooby/FeaturedTest.java
+++ b/tests/src/test/java/io/jooby/FeaturedTest.java
@@ -24,7 +24,6 @@ import reactor.core.publisher.Mono;
 import javax.annotation.Nonnull;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
@@ -48,7 +47,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 import java.util.Scanner;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -1445,7 +1443,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=0-99");
       client.get("/range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals("bytes 0-99/" + _19kb.length(), rsp.header("content-range"));
+        assertEquals("bytes 0-99/"+_19kb.length(), rsp.header("content-range"));
         assertEquals("100", rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(0, 100), rsp.body().string());
@@ -1454,9 +1452,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=-100");
       client.get("/range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals(
-            "bytes " + (_19kb.length() - 100) + "-" + (_19kb.length() - 1) + "/" + _19kb.length(),
-            rsp.header("content-range"));
+        assertEquals("bytes "+ (_19kb.length()-100) +"-"+(_19kb.length()-1)+"/"+_19kb.length(), rsp.header("content-range"));
         assertEquals("100", rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(_19kb.length() - 100), rsp.body().string());
@@ -1466,9 +1462,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=-" + last);
       client.get("/range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals(
-            "bytes " + (_19kb.length() - last) + "-" + (_19kb.length() - 1) + "/" + _19kb.length(),
-            rsp.header("content-range"));
+        assertEquals("bytes "+(_19kb.length()-last)+"-"+(_19kb.length()-1)+"/"+_19kb.length(), rsp.header("content-range"));
         assertEquals(Integer.toString(last), rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(_19kb.length() - last), rsp.body().string());
@@ -1476,7 +1470,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=0-" + last);
       client.get("/range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals("bytes 0-" + last + "/" + _19kb.length(), rsp.header("content-range"));
+        assertEquals("bytes 0-" + last + "/"+_19kb.length(), rsp.header("content-range"));
         assertEquals(Integer.toString(last + 1), rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(0, last + 1), rsp.body().string());
@@ -1563,7 +1557,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=0-99");
       client.get("/file-range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals("bytes 0-99/" + _19kb.length(), rsp.header("content-range"));
+        assertEquals("bytes 0-99/"+_19kb.length(), rsp.header("content-range"));
         assertEquals("100", rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(0, 100), rsp.body().string());
@@ -1572,9 +1566,7 @@ public class FeaturedTest {
       client.header("Range", "bytes=-100");
       client.get("/file-range", rsp -> {
         assertEquals("bytes", rsp.header("accept-ranges"));
-        assertEquals(
-            "bytes " + (_19kb.length() - 100) + "-" + (_19kb.length() - 1) + "/" + _19kb.length(),
-            rsp.header("content-range"));
+        assertEquals("bytes "+(_19kb.length() - 100)+"-"+(_19kb.length()-1)+"/"+_19kb.length() , rsp.header("content-range"));
         assertEquals("100", rsp.header("content-length"));
         assertEquals(206, rsp.code());
         assertEquals(_19kb.substring(_19kb.length() - 100), rsp.body().string());
@@ -1982,37 +1974,20 @@ public class FeaturedTest {
     });
   }
 
-  private static final String VUE = vueVersion();
-
-  private static String vueVersion() {
-    try (InputStream vueprops = FeaturedTest.class.getClassLoader()
-        .getResourceAsStream("META-INF/maven/org.webjars.npm/vue/pom.properties")) {
-      Properties properties = new Properties();
-      properties.load(vueprops);
-      return properties.getProperty("version");
-    } catch (IOException x) {
-      throw SneakyThrows.propagate(x);
-    }
-  }
-
   @Test
   public void assets() throws IOException {
 
     String cl1 = String.valueOf(userdir("src", "test", "www", "js", "index.js").toFile().length());
-    String cl2 = String
-        .valueOf(getClass().getResource("/www/foo.js").openConnection().getContentLength());
-    String cl4 = String
-        .valueOf(userdir("src", "test", "www", "css", "styles.css").toFile().length());
+    String cl2 = String.valueOf(getClass().getResource("/www/foo.js").openConnection().getContentLength());
+    String cl3 = String.valueOf(getClass().getResource("/www/index.html").openConnection().getContentLength());
+    String cl4 = String.valueOf(userdir("src", "test", "www", "css", "styles.css").toFile().length());
     String cl5 = String.valueOf(userdir("src", "test", "www", "index.html").toFile().length());
-    String vueSize = String.valueOf(
-        getClass().getResource("/META-INF/resources/webjars/vue/" + VUE + "/dist/vue.js")
-            .openConnection().getContentLength());
     new JoobyRunner(app -> {
       app.assets("/static/?*", userdir("src", "test", "www"));
       app.assets("/*", userdir("src", "test", "www"));
       app.assets("/cp/*", "/www");
-      app.assets("/jar/*", "/META-INF/resources/webjars/vue/" + VUE);
-      app.assets("/jar2/*", "/META-INF/resources/webjars/vue/" + VUE + "/dist");
+      app.assets("/jar/*", "/META-INF/resources/webjars/vue/2.5.22");
+      app.assets("/jar2/*", "/META-INF/resources/webjars/vue/2.5.22/dist");
 
       app.assets("/m/*", AssetSource.create(userdir("src", "test", "www")),
           AssetSource.create(getClass().getClassLoader(), "/www"));
@@ -2020,6 +1995,7 @@ public class FeaturedTest {
       app.assets("/fsfile.js", userdir("src", "test", "www", "js", "index.js"));
       app.assets("/cpfile.js", "/www/foo.js");
 
+
     }).ready(client -> {
       client.get("/cpfile.js", rsp -> {
         assertEquals("application/javascript;charset=utf-8",
@@ -2121,7 +2097,7 @@ public class FeaturedTest {
       client.get("/jar/dist/vue.js", rsp -> {
         assertEquals("application/javascript;charset=utf-8",
             rsp.header("Content-Type").toLowerCase());
-        assertEquals(vueSize, rsp.header("Content-Length").toLowerCase());
+        assertEquals("310837", rsp.header("Content-Length").toLowerCase());
       });
       client.get("/jar2/dist/../package.json", rsp -> {
         assertEquals(404, rsp.code());
@@ -2624,8 +2600,7 @@ public class FeaturedTest {
         assertEquals(200, rsp.code());
       });
 
-      String cl = String
-          .valueOf(getClass().getResource("/www/foo.js").openConnection().getContentLength());
+      String cl = String.valueOf(getClass().getResource("/www/foo.js").openConnection().getContentLength());
       client.head("/foo.js", rsp -> {
         assertEquals(cl, rsp.header("Content-Length"));
         assertEquals("application/javascript;charset=utf-8",