diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
index f7bc005..a6ce048 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
@@ -101,7 +101,8 @@
             .append(QuoteUtil.quote(projectName))
             .append(" && ")
             .append(
-                "git remote set-url --push \"$(git config --default origin --get clone.defaultRemoteName)\"")
+                "git remote set-url --push \"$(git config --default origin --get"
+                    + " clone.defaultRemoteName)\"")
             .append(" ")
             .append(QuoteUtil.quote(sshPushAddress))
             .append(")");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
index cb41f9b..9149a13 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
@@ -30,7 +30,7 @@
 import com.google.inject.Provider;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
-import java.net.URL;
+import java.net.URI;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -60,7 +60,7 @@
         && (sshAddr.startsWith("*:") || "".equals(sshAddr))
         && urlProvider != null) {
       try {
-        sshAddr = new URL(urlProvider.get()).getHost() + sshAddr.substring(1);
+        sshAddr = URI.create(urlProvider.get()).toURL().getHost() + sshAddr.substring(1);
       } catch (MalformedURLException e) {
         // ignore, then this scheme will be disabled
       }
@@ -92,7 +92,8 @@
     String sshdPrimaryAddress = config.getString("sshdAdvertisedPrimaryAddress");
     if (sshdPrimaryAddress != null && sshdPrimaryAddress.startsWith("*:") && urlProvider != null) {
       try {
-        sshdPrimaryAddress = new URL(urlProvider.get()).getHost() + sshdPrimaryAddress.substring(1);
+        sshdPrimaryAddress =
+            URI.create(urlProvider.get()).toURL().getHost() + sshdPrimaryAddress.substring(1);
       } catch (MalformedURLException e) {
         // ignore, then this scheme will be disabled
       }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHookTest.java b/src/test/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHookTest.java
index f9d62ba..67f63e2 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHookTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHookTest.java
@@ -110,8 +110,9 @@
     assertThat(command)
         .isEqualTo(
             String.format(
-                "git clone \"%s\" && (cd %s && %s) && (cd %s && %s) && (cd %s && git remote set-url --push "
-                    + "\"$(git config --default origin --get clone.defaultRemoteName)\" \"%s\")",
+                "git clone \"%s\" && (cd %s && %s) && (cd %s && %s) && (cd %s && git remote set-url"
+                    + " --push \"$(git config --default origin --get clone.defaultRemoteName)\""
+                    + " \"%s\")",
                 sshScheme.getUrl(ENV.projectName),
                 baseName(ENV.projectName),
                 hookCommand,
@@ -166,7 +167,8 @@
 
   private String getDefaultHookCommand() {
     return String.format(
-        "(cd %s && mkdir -p %s && curl -Lo %scommit-msg https://%s/tools/hooks/commit-msg && chmod +x %scommit-msg)",
+        "(cd %s && mkdir -p %s && curl -Lo %scommit-msg https://%s/tools/hooks/commit-msg && chmod"
+            + " +x %scommit-msg)",
         baseName(ENV.projectName), HOOKS_DIR, HOOKS_DIR, ENV.fqdn, HOOKS_DIR);
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/download/scheme/SchemeTest.java b/src/test/java/com/googlesource/gerrit/plugins/download/scheme/SchemeTest.java
index 74e57b5..851c3f1 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/download/scheme/SchemeTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/download/scheme/SchemeTest.java
@@ -30,8 +30,7 @@
 
 @RunWith(MockitoJUnitRunner.class)
 public class SchemeTest extends DownloadCommandTest {
-  @Mock
-  private PluginConfigFactory pluginConfigFactoryMock;
+  @Mock private PluginConfigFactory pluginConfigFactoryMock;
 
   @Test
   public void ensureHttpSchemeEncodedInUrl() throws Exception {
