You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2026/03/09 21:06:30 UTC

(sling-org-apache-sling-committer-cli) branch bugfix/SLING-13134 created (now d4d0fa5)

This is an automated email from the ASF dual-hosted git repository.

royteeuwen pushed a change to branch bugfix/SLING-13134
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git


      at d4d0fa5  Update project to compile on Java 24

This branch includes the following new commits:

     new cbf4df8  Upgrade to latest parent and do a spotless apply
     new d4d0fa5  Update project to compile on Java 24

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sling-org-apache-sling-committer-cli) 02/02: Update project to compile on Java 24

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

royteeuwen pushed a commit to branch bugfix/SLING-13134
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git

commit d4d0fa598f91ce131cb53643e0bb75498cd01ff6
Author: Roy Teeuwen <ro...@apache.org>
AuthorDate: Mon Mar 9 22:05:14 2026 +0100

    Update project to compile on Java 24
---
 pom.xml                                            |  14 +--
 .../apache/sling/cli/impl/junit/LogCapture.java    |  87 ++++++++++++++
 .../impl/release/PrepareVoteEmailCommandTest.java  |  10 +-
 .../cli/impl/release/TallyVotesCommandTest.java    | 126 +++++++++------------
 .../impl/release/UpdateReporterCommandTest.java    | 102 +++++++----------
 5 files changed, 191 insertions(+), 148 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4ca619a..9f6517c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,19 +144,19 @@
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>2.25.1</version>
+            <version>5.22.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.powermock</groupId>
-            <artifactId>powermock-api-mockito2</artifactId>
-            <version>2.0.2</version>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.14.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.powermock</groupId>
-            <artifactId>powermock-module-junit4</artifactId>
-            <version>2.0.2</version>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.5.6</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/src/test/java/org/apache/sling/cli/impl/junit/LogCapture.java b/src/test/java/org/apache/sling/cli/impl/junit/LogCapture.java
new file mode 100644
index 0000000..95a6cdb
--- /dev/null
+++ b/src/test/java/org/apache/sling/cli/impl/junit/LogCapture.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.cli.impl.junit;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
+import org.junit.rules.ExternalResource;
+import org.slf4j.LoggerFactory;
+
+/**
+ * JUnit rule that captures log output for a given class using Logback's {@link ListAppender}.
+ * Usage:
+ * <pre>
+ * &#64;Rule
+ * public LogCapture logCapture = new LogCapture(MyClass.class);
+ *
+ * &#64;Test
+ * public void test() {
+ *     // ... exercise code ...
+ *     assertTrue(logCapture.containsMessage("expected output"));
+ * }
+ * </pre>
+ */
+public class LogCapture extends ExternalResource {
+
+    private final Class<?>[] loggerClasses;
+    private ListAppender<ILoggingEvent> appender;
+
+    public LogCapture(Class<?>... loggerClasses) {
+        this.loggerClasses = loggerClasses;
+    }
+
+    @Override
+    protected void before() {
+        appender = new ListAppender<>();
+        appender.start();
+        for (Class<?> clazz : loggerClasses) {
+            Logger logger = (Logger) LoggerFactory.getLogger(clazz);
+            logger.addAppender(appender);
+        }
+    }
+
+    @Override
+    protected void after() {
+        for (Class<?> clazz : loggerClasses) {
+            Logger logger = (Logger) LoggerFactory.getLogger(clazz);
+            logger.detachAppender(appender);
+        }
+        appender.stop();
+    }
+
+    public List<String> getMessages() {
+        return appender.list.stream().map(ILoggingEvent::getFormattedMessage).collect(Collectors.toList());
+    }
+
+    public boolean containsMessage(String substring) {
+        return appender.list.stream().anyMatch(e -> e.getFormattedMessage().contains(substring));
+    }
+
+    public String messageAt(int index) {
+        return appender.list.get(index).getFormattedMessage();
+    }
+
+    public int size() {
+        return appender.list.size();
+    }
+}
diff --git a/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
index cc94b6e..2b4f1be 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.sling.cli.impl.Command;
 import org.apache.sling.cli.impl.DateProvider;
 import org.apache.sling.cli.impl.ExecutionMode;
@@ -38,7 +39,6 @@ import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Rule;
 import org.junit.Test;
 import org.osgi.framework.ServiceReference;
-import org.powermock.reflect.Whitebox;
 import picocli.CommandLine;
 
 import static org.junit.Assert.assertEquals;
@@ -62,10 +62,10 @@ public class PrepareVoteEmailCommandTest {
         CommandLine commandLine = mock(CommandLine.class);
         when(commandSpec.commandLine()).thenReturn(commandLine);
         when(commandLine.isUsageHelpRequested()).thenReturn(false);
-        Whitebox.setInternalState(prepareVoteEmailCommand, "spec", commandSpec);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.AUTO);
-        Whitebox.setInternalState(prepareVoteEmailCommand, "reusableCLIOptions", reusableCLIOptions);
-        Whitebox.setInternalState(prepareVoteEmailCommand, "repositoryId", 123);
+        FieldUtils.writeField(prepareVoteEmailCommand, "spec", commandSpec, true);
+        FieldUtils.writeField(reusableCLIOptions, "executionMode", ExecutionMode.AUTO, true);
+        FieldUtils.writeField(prepareVoteEmailCommand, "reusableCLIOptions", reusableCLIOptions, true);
+        FieldUtils.writeField(prepareVoteEmailCommand, "repositoryId", 123, true);
         osgiContext.registerInjectActivateService(prepareVoteEmailCommand);
 
         ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
diff --git a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
index 8ef0b22..96b803d 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
@@ -26,11 +26,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.sling.cli.impl.Command;
 import org.apache.sling.cli.impl.Credentials;
 import org.apache.sling.cli.impl.CredentialsService;
 import org.apache.sling.cli.impl.DateProvider;
 import org.apache.sling.cli.impl.ExecutionMode;
+import org.apache.sling.cli.impl.junit.LogCapture;
 import org.apache.sling.cli.impl.mail.Email;
 import org.apache.sling.cli.impl.mail.Mailer;
 import org.apache.sling.cli.impl.mail.VoteThreadFinder;
@@ -42,31 +44,17 @@ import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.osgi.framework.ServiceReference;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.reflect.Whitebox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import picocli.CommandLine;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({
-    // https://github.com/powermock/powermock/issues/864
-    "com.sun.org.apache.xerces.*",
-    "javax.xml.*",
-    "org.w3c.dom.*",
-    "javax.net.ssl.*"
-})
+
 public class TallyVotesCommandTest {
 
     @Before
@@ -79,12 +67,12 @@ public class TallyVotesCommandTest {
     @Rule
     public final OsgiContext osgiContext = new OsgiContext();
 
+    @Rule
+    public final LogCapture logCapture = new LogCapture(TallyVotesCommand.class);
+
     @Test
-    @PrepareForTest({LoggerFactory.class})
     public void testDryRun() throws Exception {
-        mockStatic(LoggerFactory.class);
-        Logger logger = mock(Logger.class);
-        when(LoggerFactory.getLogger(TallyVotesCommand.class)).thenReturn(logger);
+        Mailer mailer = mock(Mailer.class);
         List<Email> thread = new ArrayList<>() {
             {
                 add(mockEmail("johndoe@apache.org", "John Doe"));
@@ -96,42 +84,35 @@ public class TallyVotesCommandTest {
                 add(mockEmail("jhoh228@googlemail.com.INVALID", "Jörg Hoh"));
             }
         };
-        prepareExecution(mock(Mailer.class), thread);
-        TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
-        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.DRY_RUN);
-        Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
-        Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
-        osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
-        Command command = (Command) osgiContext.bundleContext().getService(reference);
+        prepareExecution(mailer, thread);
+        Command command = createCommand(123, ExecutionMode.DRY_RUN);
         assertEquals(CommandLine.ExitCode.OK, (int) command.call());
-        verify(logger)
-                .info("From: John Doe <jo...@apache.org>\n" + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
-                        + "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n"
-                        + "Date: Thu, 1 Jan 1970 01:00:00 +0100\n"
-                        + "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n"
-                        + "\n"
-                        + "Hi,\n"
-                        + "\n"
-                        + "The vote has passed with the following result:\n"
-                        + "\n"
-                        + "+1 (binding): Alice, Bob, Charlie, John Doe, Joerg Hoh\n"
-                        + "+1 (non-binding): Daniel\n"
-                        + "\n"
-                        + "I will copy this release to the Sling dist directory and\n"
-                        + "promote the artifacts to the central Maven repository.\n"
-                        + "\n"
-                        + "Regards,\n"
-                        + "John Doe\n");
+        verifyNoInteractions(mailer);
+        assertTrue(logCapture.containsMessage(
+                "The following email would be sent from your @apache.org address (see the \"From:\" header):"));
+        assertTrue(logCapture.containsMessage("From: John Doe <jo...@apache.org>\n"
+                + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                + "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                + "Date: Thu, 1 Jan 1970 01:00:00 +0100\n"
+                + "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n"
+                + "\n"
+                + "Hi,\n"
+                + "\n"
+                + "The vote has passed with the following result:\n"
+                + "\n"
+                + "+1 (binding): Alice, Bob, Charlie, John Doe, Joerg Hoh\n"
+                + "+1 (non-binding): Daniel\n"
+                + "\n"
+                + "I will copy this release to the Sling dist directory and\n"
+                + "promote the artifacts to the central Maven repository.\n"
+                + "\n"
+                + "Regards,\n"
+                + "John Doe\n"));
     }
 
     @Test
-    @PrepareForTest({LoggerFactory.class})
     public void testDryRunNotEnoughBindingVotes() throws Exception {
-        mockStatic(LoggerFactory.class);
-        Logger logger = mock(Logger.class);
-        when(LoggerFactory.getLogger(TallyVotesCommand.class)).thenReturn(logger);
+        Mailer mailer = mock(Mailer.class);
         List<Email> thread = new ArrayList<>() {
             {
                 add(mockEmail("johndoe@apache.org", "John Doe"));
@@ -140,17 +121,12 @@ public class TallyVotesCommandTest {
                 add(mockEmail("daniel@apache.org", "Daniel"));
             }
         };
-        prepareExecution(mock(Mailer.class), thread);
-        TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
-        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.DRY_RUN);
-        Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
-        Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
-        osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
-        Command command = (Command) osgiContext.bundleContext().getService(reference);
+        prepareExecution(mailer, thread);
+        Command command = createCommand(123, ExecutionMode.DRY_RUN);
         assertEquals(CommandLine.ExitCode.USAGE, (int) command.call());
-        verify(logger).info("Release {} does not have at least 3 binding votes.", "Apache Sling CLI Test 1.0.0");
+        verifyNoInteractions(mailer);
+        assertTrue(logCapture.containsMessage(
+                "Release Apache Sling CLI Test 1.0.0 does not have at least 3 binding votes."));
     }
 
     @Test
@@ -167,14 +143,7 @@ public class TallyVotesCommandTest {
         };
         Mailer mailer = mock(Mailer.class);
         prepareExecution(mailer, thread);
-        TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
-        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.AUTO);
-        Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
-        Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
-        osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
-        Command command = (Command) osgiContext.bundleContext().getService(reference);
+        Command command = createCommand(123, ExecutionMode.AUTO);
         assertEquals(CommandLine.ExitCode.OK, (int) command.call());
         verify(mailer)
                 .send("From: John Doe <jo...@apache.org>\n" + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
@@ -196,6 +165,17 @@ public class TallyVotesCommandTest {
                         + "John Doe\n");
     }
 
+    private Command createCommand(int repositoryId, ExecutionMode executionMode) throws IllegalAccessException {
+        TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
+        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
+        FieldUtils.writeField(reusableCLIOptions, "executionMode", executionMode, true);
+        FieldUtils.writeField(tallyVotesCommand, "repositoryId", repositoryId, true);
+        FieldUtils.writeField(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions, true);
+        osgiContext.registerInjectActivateService(tallyVotesCommand);
+        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
+        return (Command) osgiContext.bundleContext().getService(reference);
+    }
+
     private Email mockEmail(String address, String name) throws Exception {
         Email email = mock(Email.class);
         when(email.getBody()).thenReturn("+1");
@@ -203,7 +183,7 @@ public class TallyVotesCommandTest {
         return email;
     }
 
-    private void prepareExecution(Mailer mailer, List<Email> thread) throws IOException {
+    private void prepareExecution(Mailer mailer, List<Email> thread) throws IOException, IllegalAccessException {
         CredentialsService credentialsService = mock(CredentialsService.class);
         when(credentialsService.getAsfCredentials()).thenReturn(new Credentials("johndoe", "secret"));
 
@@ -218,8 +198,8 @@ public class TallyVotesCommandTest {
                 add(new Member("joerghoh", "Joerg Hoh", true));
             }
         };
-        Whitebox.setInternalState(membersFinder, "members", members);
-        Whitebox.setInternalState(membersFinder, "lastCheck", System.currentTimeMillis());
+        FieldUtils.writeField(membersFinder, "members", members, true);
+        FieldUtils.writeField(membersFinder, "lastCheck", System.currentTimeMillis(), true);
 
         StagingRepository stagingRepository = mock(StagingRepository.class);
         when(stagingRepository.getDescription()).thenReturn("Apache Sling CLI Test 1.0.0");
diff --git a/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
index 430bfd0..10f53fa 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.HashSet;
 import java.util.List;
 
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.http.StatusLine;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -30,38 +31,26 @@ import org.apache.sling.cli.impl.ExecutionMode;
 import org.apache.sling.cli.impl.InputOption;
 import org.apache.sling.cli.impl.UserInput;
 import org.apache.sling.cli.impl.http.HttpClientFactory;
+import org.apache.sling.cli.impl.junit.LogCapture;
 import org.apache.sling.cli.impl.nexus.RepositoryService;
 import org.apache.sling.cli.impl.nexus.StagingRepository;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.reflect.Whitebox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.mockito.MockedStatic;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockIgnore({
-    // https://github.com/powermock/powermock/issues/864
-    "com.sun.org.apache.xerces.*",
-    "javax.xml.*",
-    "org.w3c.dom.*"
-})
 public class UpdateReporterCommandTest {
 
     private CloseableHttpClient client;
@@ -69,6 +58,9 @@ public class UpdateReporterCommandTest {
     @Rule
     public OsgiContext osgiContext = new OsgiContext();
 
+    @Rule
+    public final LogCapture logCapture = new LogCapture(UpdateReporterCommand.class);
+
     @Before
     public void before() throws IOException {
         RepositoryService repositoryService = mock(RepositoryService.class);
@@ -87,47 +79,38 @@ public class UpdateReporterCommandTest {
     }
 
     @Test
-    @PrepareForTest({LoggerFactory.class})
     public void testDryRun() throws Exception {
-        mockStatic(LoggerFactory.class);
-        Logger logger = mock(Logger.class);
-        when(LoggerFactory.getLogger(UpdateReporterCommand.class)).thenReturn(logger);
-        UpdateReporterCommand updateReporterCommand = spy(new UpdateReporterCommand());
-        Whitebox.setInternalState(updateReporterCommand, "repositoryId", 42);
-        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.DRY_RUN);
-        Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
-        osgiContext.registerInjectActivateService(updateReporterCommand);
-        Command updateReporter = osgiContext.getService(Command.class);
-        assertTrue(
-                "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
-                updateReporter instanceof UpdateReporterCommand);
+        Command updateReporter = createCommand(42, ExecutionMode.DRY_RUN);
         assertEquals(0, (int) updateReporter.call());
-        verify(logger).info("The following {} would be added to the Apache Reporter System:", "releases");
-        verify(logger).info("  - {}", "Apache Sling CLI 1");
-        verify(logger).info("  - {}", "Apache Sling CLI 2");
-        verifyNoMoreInteractions(logger);
+        verifyNoInteractions(client);
+        assertEquals(3, logCapture.size());
+        assertTrue(logCapture.containsMessage("The following releases would be added to the Apache Reporter System:"));
+        assertTrue(logCapture.containsMessage("  - Apache Sling CLI 1"));
+        assertTrue(logCapture.containsMessage("  - Apache Sling CLI 2"));
     }
 
     @Test
-    @PrepareForTest({UserInput.class})
     public void testInteractive() throws Exception {
-        UpdateReporterCommand updateReporterCommand = spy(new UpdateReporterCommand());
-        Whitebox.setInternalState(updateReporterCommand, "repositoryId", 42);
-        ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.INTERACTIVE);
-        Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
-        osgiContext.registerInjectActivateService(updateReporterCommand);
-        Command updateReporter = osgiContext.getService(Command.class);
-        assertTrue(
-                "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
-                updateReporter instanceof UpdateReporterCommand);
+        try (MockedStatic<UserInput> userInputMock = mockStatic(UserInput.class)) {
+            Command updateReporter = createCommand(42, ExecutionMode.INTERACTIVE);
+            CloseableHttpResponse response = mock(CloseableHttpResponse.class);
+            StatusLine statusLine = mock(StatusLine.class);
+            String question =
+                    "Should the following releases be added to the Apache Reporter System?\n  - Apache Sling CLI 1\n  - Apache Sling CLI 2\n";
+            userInputMock.when(() -> UserInput.yesNo(question, InputOption.YES)).thenReturn(InputOption.YES);
+            when(response.getStatusLine()).thenReturn(statusLine);
+            when(statusLine.getStatusCode()).thenReturn(200);
+            when(client.execute(any())).thenReturn(response);
+            assertEquals(0, (int) updateReporter.call());
+            verify(client, times(2)).execute(any());
+        }
+    }
+
+    @Test
+    public void testAuto() throws Exception {
+        Command updateReporter = createCommand(42, ExecutionMode.AUTO);
         CloseableHttpResponse response = mock(CloseableHttpResponse.class);
         StatusLine statusLine = mock(StatusLine.class);
-        mockStatic(UserInput.class);
-        String question =
-                "Should the following releases be added to the Apache Reporter System?\n  - Apache Sling CLI 1\n  - Apache Sling CLI 2\n";
-        when(UserInput.yesNo(question, InputOption.YES)).thenReturn(InputOption.YES);
         when(response.getStatusLine()).thenReturn(statusLine);
         when(statusLine.getStatusCode()).thenReturn(200);
         when(client.execute(any())).thenReturn(response);
@@ -135,24 +118,17 @@ public class UpdateReporterCommandTest {
         verify(client, times(2)).execute(any());
     }
 
-    @Test
-    public void testAuto() throws Exception {
+    private Command createCommand(int repositoryId, ExecutionMode executionMode) throws IllegalAccessException {
         UpdateReporterCommand updateReporterCommand = spy(new UpdateReporterCommand());
-        Whitebox.setInternalState(updateReporterCommand, "repositoryId", 42);
+        FieldUtils.writeField(updateReporterCommand, "repositoryId", repositoryId, true);
         ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
-        Whitebox.setInternalState(reusableCLIOptions, "executionMode", ExecutionMode.AUTO);
-        Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
+        FieldUtils.writeField(reusableCLIOptions, "executionMode", executionMode, true);
+        FieldUtils.writeField(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions, true);
         osgiContext.registerInjectActivateService(updateReporterCommand);
-        Command updateReporter = osgiContext.getService(Command.class);
+        Command result = osgiContext.getService(Command.class);
         assertTrue(
                 "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
-                updateReporter instanceof UpdateReporterCommand);
-        CloseableHttpResponse response = mock(CloseableHttpResponse.class);
-        StatusLine statusLine = mock(StatusLine.class);
-        when(response.getStatusLine()).thenReturn(statusLine);
-        when(statusLine.getStatusCode()).thenReturn(200);
-        when(client.execute(any())).thenReturn(response);
-        assertEquals(0, (int) updateReporter.call());
-        verify(client, times(2)).execute(any());
+                result instanceof UpdateReporterCommand);
+        return result;
     }
 }


(sling-org-apache-sling-committer-cli) 01/02: Upgrade to latest parent and do a spotless apply

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

royteeuwen pushed a commit to branch bugfix/SLING-13134
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git

commit cbf4df8ba5cf65ea5b45cd2bd0704ba6721be2cd
Author: Roy Teeuwen <ro...@apache.org>
AuthorDate: Mon Mar 9 21:30:53 2026 +0100

    Upgrade to latest parent and do a spotless apply
---
 pom.xml                                            | 286 ++++++++++-----------
 .../java/org/apache/sling/cli/impl/CLIGroup.java   |  36 +--
 .../java/org/apache/sling/cli/impl/Command.java    |  31 +--
 .../apache/sling/cli/impl/CommandProcessor.java    |  48 ++--
 .../sling/cli/impl/ComponentContextHelper.java     |  38 +--
 .../org/apache/sling/cli/impl/Credentials.java     |  36 +--
 .../apache/sling/cli/impl/CredentialsService.java  |  52 ++--
 .../org/apache/sling/cli/impl/DateProvider.java    |  37 ++-
 .../org/apache/sling/cli/impl/ExecutionMode.java   |  36 +--
 .../apache/sling/cli/impl/ExecutionTrigger.java    |  26 +-
 .../org/apache/sling/cli/impl/InputOption.java     |  36 +--
 .../java/org/apache/sling/cli/impl/UserInput.java  |  44 ++--
 .../sling/cli/impl/ci/CIStatusValidator.java       |  85 +++---
 .../sling/cli/impl/http/HttpClientFactory.java     |  61 +++--
 .../sling/cli/impl/jbake/JBakeContentUpdater.java  | 131 +++++-----
 .../apache/sling/cli/impl/jira/ErrorResponse.java  |  34 +--
 .../java/org/apache/sling/cli/impl/jira/Issue.java |  36 +--
 .../apache/sling/cli/impl/jira/IssueResponse.java  |  28 +-
 .../apache/sling/cli/impl/jira/IssueUpdate.java    |  40 +--
 .../org/apache/sling/cli/impl/jira/Transition.java |  36 +--
 .../sling/cli/impl/jira/TransitionsResponse.java   |  36 +--
 .../org/apache/sling/cli/impl/jira/Version.java    |  34 +--
 .../apache/sling/cli/impl/jira/VersionClient.java  | 237 +++++++++--------
 .../java/org/apache/sling/cli/impl/mail/Email.java |  51 ++--
 .../org/apache/sling/cli/impl/mail/Mailer.java     |  62 ++---
 .../sling/cli/impl/mail/VoteThreadFinder.java      |  47 ++--
 .../org/apache/sling/cli/impl/nexus/Artifact.java  |  52 ++--
 .../sling/cli/impl/nexus/LocalRepository.java      |  36 +--
 .../sling/cli/impl/nexus/RepositoryService.java    | 151 ++++++-----
 .../sling/cli/impl/nexus/StagingRepositories.java  |  27 +-
 .../sling/cli/impl/nexus/StagingRepository.java    |  37 +--
 .../org/apache/sling/cli/impl/people/Member.java   |  36 +--
 .../sling/cli/impl/people/MembersFinder.java       |  67 ++---
 .../apache/sling/cli/impl/pgp/HashValidator.java   |  36 +--
 .../sling/cli/impl/pgp/PGPSignatureValidator.java  |  54 ++--
 .../cli/impl/release/CreateJiraVersionCommand.java |  93 ++++---
 .../apache/sling/cli/impl/release/ListCommand.java |  50 ++--
 .../cli/impl/release/PrepareVoteEmailCommand.java  |  94 +++----
 .../org/apache/sling/cli/impl/release/Release.java | 104 ++++----
 .../sling/cli/impl/release/ReleaseCLIGroup.java    |  43 ++--
 .../impl/release/ReleaseJiraVersionCommand.java    |  89 ++++---
 .../sling/cli/impl/release/ReusableCLIOptions.java |  39 ++-
 .../sling/cli/impl/release/TallyVotesCommand.java  | 118 +++++----
 .../cli/impl/release/UpdateLocalSiteCommand.java   |  87 +++----
 .../cli/impl/release/UpdateReporterCommand.java    |  74 +++---
 .../cli/impl/release/VerifyReleasesCommand.java    | 113 ++++----
 .../sling/cli/impl/CommandProcessorTest.java       |  72 +++---
 .../sling/cli/impl/CredentialsServiceTest.java     |  47 ++--
 .../sling/cli/impl/ci/CIStatusValidatorTest.java   |  68 ++---
 .../sling/cli/impl/http/HttpClientFactoryTest.java |  45 ++--
 .../sling/cli/impl/http/HttpExchangeHandler.java   |  40 ++-
 .../cli/impl/jbake/JBakeContentUpdaterTest.java    | 191 +++++++-------
 .../cli/impl/jira/CreateVersionJiraAction.java     |  52 ++--
 .../sling/cli/impl/jira/EditVersionJiraAction.java |  59 +++--
 ...GetRelatedIssueCountsForVersionsJiraAction.java |  40 +--
 .../sling/cli/impl/jira/IssueUpdateTest.java       |  46 ++--
 .../cli/impl/jira/IssuesSearchJiraAction.java      |  53 ++--
 .../org/apache/sling/cli/impl/jira/JiraAction.java |  49 ++--
 .../cli/impl/jira/ListVersionsJiraAction.java      |  34 +--
 .../org/apache/sling/cli/impl/jira/MockJira.java   |  66 ++---
 .../sling/cli/impl/jira/TransitionsJiraAction.java |  45 ++--
 .../sling/cli/impl/jira/VersionClientTest.java     |  89 ++++---
 .../sling/cli/impl/junit/SystemPropertiesRule.java |  51 ++--
 .../org/apache/sling/cli/impl/nexus/MockNexus.java |  49 ++--
 .../cli/impl/nexus/QueryLuceneIndexHandler.java    |  43 ++--
 .../cli/impl/nexus/RepositoryContentHandler.java   |  42 +--
 .../cli/impl/nexus/RepositoryServiceTest.java      |  68 ++---
 .../cli/impl/nexus/StagingRepositoriesHandler.java |  51 ++--
 .../sling/cli/impl/pgp/HashValidatorTest.java      |  86 ++++---
 .../cli/impl/pgp/PGPSignatureValidatorTest.java    |  68 ++---
 .../impl/release/PrepareVoteEmailCommandTest.java  | 105 ++++----
 .../apache/sling/cli/impl/release/ReleaseTest.java |  61 ++---
 .../cli/impl/release/TallyVotesCommandTest.java    | 223 ++++++++--------
 .../impl/release/UpdateReporterCommandTest.java    |  53 ++--
 74 files changed, 2573 insertions(+), 2347 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1545fd4..4ca619a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,15 +9,13 @@
     License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
     OF ANY KIND, either express or implied. See the License for the specific 
     language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>52</version>
+        <version>66</version>
         <relativePath />
     </parent>
 
@@ -30,145 +28,10 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.build.outputTimestamp>1</project.build.outputTimestamp>
+        <project.build.outputTimestamp>2026-01-01T00:00:01Z</project.build.outputTimestamp>
         <sling.java.version>11</sling.java.version>
     </properties>
 
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-clean-plugin</artifactId>
-                <configuration>
-                    <filesets>
-                        <fileset>
-                            <directory>launcher</directory>
-                        </fileset>
-                    </filesets>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>biz.aQute.bnd</groupId>
-                <artifactId>bnd-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>lib/</classpathPrefix>
-                            <mainClass>org.apache.sling.cli.impl.Main</mainClass>
-                        </manifest>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <overWriteReleases>false</overWriteReleases>
-                            <includeScope>runtime</includeScope>
-                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                            <excludeTransitive>true</excludeTransitive>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>unpack-feature-launcher</id>
-                        <phase>process-sources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.sling</groupId>
-                                    <artifactId>org.apache.sling.feature.launcher</artifactId>
-                                    <type>zip</type>
-                                    <outputDirectory>${project.build.directory}/lib/feature-launcher</outputDirectory>
-                                    <fileMappers>
-                                        <org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
-                                            <pattern>^org\.apache\.sling\.feature\.launcher-[0-9\.]+(-SNAPSHOT)?/</pattern>
-                                            <replacement>./</replacement>
-                                        </org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
-                                    </fileMappers>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.sling</groupId>
-                <artifactId>slingfeature-maven-plugin</artifactId>
-                <version>0.8.0</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <skipAddFeatureDependencies>true</skipAddFeatureDependencies>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>feature-dependencies</id>
-                        <goals>
-                            <goal>repository</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>io.fabric8</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <version>0.40.1</version>
-                <executions>
-                    <execution>
-                        <id>default</id>
-                        <goals>
-                            <goal>build</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <images>
-                        <image>
-                            <name>apache/sling-cli</name>
-                            <build>
-                                <contextDir>${project.basedir}</contextDir>
-                                <args>
-                                    <FEATURE_FILE>target/artifacts/org/apache/sling/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}-app.slingfeature</FEATURE_FILE>
-                                </args>
-                            </build>
-                        </image>
-                    </images>
-                    <cleanup>try</cleanup>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>biz.aQute.bnd</groupId>
-                <artifactId>bnd-baseline-maven-plugin</artifactId>
-                <configuration>
-                    <!-- We don't export an API, so it should be safe to skip baseline. -->
-                    <skip>true</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>src/main/resources/templates/*</exclude>
-                        <exclude>**/*.md5</exclude>
-                        <exclude>**/*.sha1</exclude>
-                        <exclude>**/*.asc</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
     <dependencies>
         <dependency>
             <groupId>org.jetbrains</groupId>
@@ -226,10 +89,10 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-          <groupId>org.eclipse.jgit</groupId>
-          <artifactId>org.eclipse.jgit</artifactId>
-          <version>5.2.1.201812262042-r</version>
-          <scope>provided</scope>
+            <groupId>org.eclipse.jgit</groupId>
+            <artifactId>org.eclipse.jgit</artifactId>
+            <version>5.2.1.201812262042-r</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>info.picocli</groupId>
@@ -318,4 +181,139 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-clean-plugin</artifactId>
+                <configuration>
+                    <filesets>
+                        <fileset>
+                            <directory>launcher</directory>
+                        </fileset>
+                    </filesets>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>biz.aQute.bnd</groupId>
+                <artifactId>bnd-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <mainClass>org.apache.sling.cli.impl.Main</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <overWriteReleases>false</overWriteReleases>
+                            <includeScope>runtime</includeScope>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <excludeTransitive>true</excludeTransitive>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>unpack-feature-launcher</id>
+                        <goals>
+                            <goal>unpack</goal>
+                        </goals>
+                        <phase>process-sources</phase>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.apache.sling</groupId>
+                                    <artifactId>org.apache.sling.feature.launcher</artifactId>
+                                    <type>zip</type>
+                                    <outputDirectory>${project.build.directory}/lib/feature-launcher</outputDirectory>
+                                    <fileMappers>
+                                        <org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
+                                            <pattern>^org\.apache\.sling\.feature\.launcher-[0-9\.]+(-SNAPSHOT)?/</pattern>
+                                            <replacement>./</replacement>
+                                        </org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
+                                    </fileMappers>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>slingfeature-maven-plugin</artifactId>
+                <version>0.8.0</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <skipAddFeatureDependencies>true</skipAddFeatureDependencies>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>feature-dependencies</id>
+                        <goals>
+                            <goal>repository</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>io.fabric8</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>0.40.1</version>
+                <configuration>
+                    <images>
+                        <image>
+                            <name>apache/sling-cli</name>
+                            <build>
+                                <contextDir>${project.basedir}</contextDir>
+                                <args>
+                                    <FEATURE_FILE>target/artifacts/org/apache/sling/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}-app.slingfeature</FEATURE_FILE>
+                                </args>
+                            </build>
+                        </image>
+                    </images>
+                    <cleanup>try</cleanup>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>default</id>
+                        <goals>
+                            <goal>build</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>biz.aQute.bnd</groupId>
+                <artifactId>bnd-baseline-maven-plugin</artifactId>
+                <configuration>
+                    <!-- We don't export an API, so it should be safe to skip baseline. -->
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>src/main/resources/templates/*</exclude>
+                        <exclude>**/*.md5</exclude>
+                        <exclude>**/*.sha1</exclude>
+                        <exclude>**/*.asc</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/src/main/java/org/apache/sling/cli/impl/CLIGroup.java b/src/main/java/org/apache/sling/cli/impl/CLIGroup.java
index ead6ba5..14d9285 100644
--- a/src/main/java/org/apache/sling/cli/impl/CLIGroup.java
+++ b/src/main/java/org/apache/sling/cli/impl/CLIGroup.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 /**
diff --git a/src/main/java/org/apache/sling/cli/impl/Command.java b/src/main/java/org/apache/sling/cli/impl/Command.java
index 9e0ba6b..9b87dbc 100644
--- a/src/main/java/org/apache/sling/cli/impl/Command.java
+++ b/src/main/java/org/apache/sling/cli/impl/Command.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
@@ -21,12 +23,11 @@ import java.util.concurrent.Callable;
 /**
  * Marker interface for {@code Commands} supported by the Apache Sling Committer CLI.
  * The {@code call} method is expected to return on of the exit codes found in {@code CommandLine.ExitCode}
- * 
+ *
  * @see picocli.CommandLine.ExitCode
  */
 public interface Command extends Callable<Integer> {
-    
+
     String PROPERTY_NAME_COMMAND_GROUP = "command.group";
     String PROPERTY_NAME_COMMAND_NAME = "command.name";
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java b/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
index fbf6e85..e03aca8 100644
--- a/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
+++ b/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
@@ -1,24 +1,23 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
-import static org.osgi.service.component.annotations.ReferenceCardinality.MULTIPLE;
-import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -41,13 +40,14 @@ import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
+import static org.osgi.service.component.annotations.ReferenceCardinality.MULTIPLE;
+import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
+
 @CommandLine.Command(
         name = "docker run -it --env-file=./docker-env apache/sling-cli",
-        description = "Apache Sling Committers CLI"
-)
+        description = "Apache Sling Committers CLI")
 @Designate(ocd = Config.class)
 @Component(service = CommandProcessor.class)
 public class CommandProcessor {
@@ -94,7 +94,6 @@ public class CommandProcessor {
                 commands.remove(commandWithProps.group);
             }
         }
-
     }
 
     void runCommand() {
@@ -149,7 +148,9 @@ public class CommandProcessor {
     // visible for testing
     protected void stopFramework() {
         try {
-            ctx.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).adapt(Framework.class).stop();
+            ctx.getBundle(Constants.SYSTEM_BUNDLE_LOCATION)
+                    .adapt(Framework.class)
+                    .stop();
         } catch (BundleException e) {
             logger.error("Failed shutting down framework, forcing exit", e);
             System.exit(1);
@@ -162,11 +163,8 @@ public class CommandProcessor {
         private final Command cmd;
 
         static CommandWithProps of(Command cmd, Map<String, ?> props) {
-            return new CommandWithProps(
-                    cmd,
-                    (String) props.get(Command.PROPERTY_NAME_COMMAND_GROUP),
-                    (String) props.get(Command.PROPERTY_NAME_COMMAND_NAME)
-            );
+            return new CommandWithProps(cmd, (String) props.get(Command.PROPERTY_NAME_COMMAND_GROUP), (String)
+                    props.get(Command.PROPERTY_NAME_COMMAND_NAME));
         }
 
         CommandWithProps(Command cmd, String group, String name) {
diff --git a/src/main/java/org/apache/sling/cli/impl/ComponentContextHelper.java b/src/main/java/org/apache/sling/cli/impl/ComponentContextHelper.java
index b996e88..66f6839 100644
--- a/src/main/java/org/apache/sling/cli/impl/ComponentContextHelper.java
+++ b/src/main/java/org/apache/sling/cli/impl/ComponentContextHelper.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
@@ -21,7 +23,7 @@ import org.osgi.service.component.ComponentContext;
 public class ComponentContextHelper {
 
     public static ComponentContextHelper wrap(ComponentContext wrapped) {
-   
+
         return new ComponentContextHelper(wrapped);
     }
 
@@ -30,18 +32,18 @@ public class ComponentContextHelper {
     public ComponentContextHelper(ComponentContext wrapped) {
         this.wrapped = wrapped;
     }
-    
+
     public String getProperty(String name, String fallback) {
         Object prop = wrapped.getProperties().get(name);
-        if ( prop != null) {
+        if (prop != null) {
             return prop.toString();
         }
-        
+
         return fallback;
     }
-    
+
     public int getProperty(String name, int fallback) {
-        
+
         return Integer.parseInt(getProperty(name, String.valueOf(fallback)));
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/Credentials.java b/src/main/java/org/apache/sling/cli/impl/Credentials.java
index 2df5a32..c2fa674 100644
--- a/src/main/java/org/apache/sling/cli/impl/Credentials.java
+++ b/src/main/java/org/apache/sling/cli/impl/Credentials.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 public class Credentials {
diff --git a/src/main/java/org/apache/sling/cli/impl/CredentialsService.java b/src/main/java/org/apache/sling/cli/impl/CredentialsService.java
index f869972..7304d7a 100644
--- a/src/main/java/org/apache/sling/cli/impl/CredentialsService.java
+++ b/src/main/java/org/apache/sling/cli/impl/CredentialsService.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 import java.util.Optional;
@@ -35,7 +35,7 @@ public class CredentialsService {
     protected void activate() {
         asfCredentials = new Credentials(ASF_USER.getValue(), ASF_PWD.getValue());
     }
-    
+
     public Credentials getAsfCredentials() {
         return asfCredentials;
     }
@@ -45,21 +45,21 @@ public class CredentialsService {
         private final String sysProp;
         private final String envVar;
         private final String friendlyName;
-        
+
         public ValueSource(String sysProp, String envVar, String friendlyName) {
 
             this.sysProp = sysProp;
             this.envVar = envVar;
             this.friendlyName = friendlyName;
         }
-        
+
         public String getValue() {
-            
+
             return Optional.ofNullable(System.getProperty(sysProp))
-                    .or( () -> Optional.ofNullable(System.getenv(envVar)) )
-                    .orElseThrow(() -> new IllegalStateException(String.format("Cannot detect %s after looking for %s system property and %s environment variable.", 
+                    .or(() -> Optional.ofNullable(System.getenv(envVar)))
+                    .orElseThrow(() -> new IllegalStateException(String.format(
+                            "Cannot detect %s after looking for %s system property and %s environment variable.",
                             friendlyName, sysProp, envVar)));
-                    
-        }   
+        }
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/DateProvider.java b/src/main/java/org/apache/sling/cli/impl/DateProvider.java
index 9e114d1..6c14678 100644
--- a/src/main/java/org/apache/sling/cli/impl/DateProvider.java
+++ b/src/main/java/org/apache/sling/cli/impl/DateProvider.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 import java.time.OffsetDateTime;
@@ -42,5 +42,4 @@ public class DateProvider {
         OffsetDateTime offsetDateTime = getCurrentDate();
         return offsetDateTime.format(jiraReleaseDate);
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/ExecutionMode.java b/src/main/java/org/apache/sling/cli/impl/ExecutionMode.java
index bf879af..ba0ca00 100644
--- a/src/main/java/org/apache/sling/cli/impl/ExecutionMode.java
+++ b/src/main/java/org/apache/sling/cli/impl/ExecutionMode.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 public enum ExecutionMode {
diff --git a/src/main/java/org/apache/sling/cli/impl/ExecutionTrigger.java b/src/main/java/org/apache/sling/cli/impl/ExecutionTrigger.java
index 23fa1b8..999f402 100644
--- a/src/main/java/org/apache/sling/cli/impl/ExecutionTrigger.java
+++ b/src/main/java/org/apache/sling/cli/impl/ExecutionTrigger.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
diff --git a/src/main/java/org/apache/sling/cli/impl/InputOption.java b/src/main/java/org/apache/sling/cli/impl/InputOption.java
index d2471d9..d5052d9 100644
--- a/src/main/java/org/apache/sling/cli/impl/InputOption.java
+++ b/src/main/java/org/apache/sling/cli/impl/InputOption.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 public class InputOption {
diff --git a/src/main/java/org/apache/sling/cli/impl/UserInput.java b/src/main/java/org/apache/sling/cli/impl/UserInput.java
index d7db4e6..a52f6bd 100644
--- a/src/main/java/org/apache/sling/cli/impl/UserInput.java
+++ b/src/main/java/org/apache/sling/cli/impl/UserInput.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl;
 
 import java.io.Console;
@@ -30,16 +30,15 @@ import org.slf4j.LoggerFactory;
 public class UserInput {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(UserInput.class);
-    private static final InputOption[] YES_NO = new InputOption[]{InputOption.YES, InputOption.NO};
+    private static final InputOption[] YES_NO = new InputOption[] {InputOption.YES, InputOption.NO};
 
     private UserInput() {}
 
     public static InputOption yesNo(String question, InputOption defaultOption) {
         LOGGER.info(question);
         Set<InputOption> answers = new LinkedHashSet<>(Arrays.asList(YES_NO));
-        String choice =
-                answers.stream().map(InputOption::toString).collect(Collectors.joining("/")) + "? [" + defaultOption.toString() +
-                        "]: ";
+        String choice = answers.stream().map(InputOption::toString).collect(Collectors.joining("/")) + "? ["
+                + defaultOption.toString() + "]: ";
         while (true) {
             System.out.print(choice);
             Console console = System.console();
@@ -58,5 +57,4 @@ public class UserInput {
             }
         }
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java b/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
index c4190c8..950bdb4 100644
--- a/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
+++ b/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
@@ -1,30 +1,23 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.ci;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -33,9 +26,15 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
-
 import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -104,8 +103,10 @@ public class CIStatusValidator {
 
             Document xmlDocument = builder.parse(artifactFilePath.toFile());
             XPath xPath = xPathFactory.newXPath();
-            String repositoryName = (String) xPath.compile("/project/scm/url/text()").evaluate(xmlDocument, XPathConstants.STRING);
-            String tagName = (String) xPath.compile("/project/scm/tag/text()").evaluate(xmlDocument, XPathConstants.STRING);
+            String repositoryName =
+                    (String) xPath.compile("/project/scm/url/text()").evaluate(xmlDocument, XPathConstants.STRING);
+            String tagName =
+                    (String) xPath.compile("/project/scm/tag/text()").evaluate(xmlDocument, XPathConstants.STRING);
             if (!tagName.isEmpty()) {
                 tagName = tagName.trim();
                 log.debug("Extracted TAG: {}", tagName);
@@ -121,13 +122,17 @@ public class CIStatusValidator {
                     }
                 }
                 // strip off the .git suffix from the repo name if it exists
-                if(repositoryName.endsWith(".git")) {
+                if (repositoryName.endsWith(".git")) {
                     repositoryName = repositoryName.substring(0, repositoryName.length() - 4);
                 }
                 log.debug("Extracted REPO: {}", repositoryName);
             }
-            if (repositoryName != null && !repositoryName.isEmpty() && !tagName.isEmpty() && !tagName.equalsIgnoreCase("HEAD")) {
-                ciEndpoint = String.format("https://api.github.com/repos/apache/%s/commits/%s/status", repositoryName, tagName);
+            if (repositoryName != null
+                    && !repositoryName.isEmpty()
+                    && !tagName.isEmpty()
+                    && !tagName.equalsIgnoreCase("HEAD")) {
+                ciEndpoint = String.format(
+                        "https://api.github.com/repos/apache/%s/commits/%s/status", repositoryName, tagName);
                 log.debug("Loaded CI Endpoint: {}", ciEndpoint);
             }
         } catch (XPathExpressionException | SAXException | IOException | ParserConfigurationException e) {
@@ -154,10 +159,16 @@ public class CIStatusValidator {
                     ciEndpoint = status.get("commit_url").getAsString();
                     log.debug("Getting parent from commit url: {}", ciEndpoint);
                     JsonObject commit = fetchJson(ciEndpoint);
-                    if (commit.has(PN_PARENTS) && commit.get(PN_PARENTS).getAsJsonArray().size() > 0) {
+                    if (commit.has(PN_PARENTS)
+                            && commit.get(PN_PARENTS).getAsJsonArray().size() > 0) {
                         log.debug("Loading commit status: {}", ciEndpoint);
-                        ciEndpoint = commit.get(PN_PARENTS).getAsJsonArray().get(0).getAsJsonObject().get("url")
-                                .getAsString() + "/status";
+                        ciEndpoint = commit.get(PN_PARENTS)
+                                        .getAsJsonArray()
+                                        .get(0)
+                                        .getAsJsonObject()
+                                        .get("url")
+                                        .getAsString()
+                                + "/status";
                         status = fetchJson(ciEndpoint);
                     }
                 }
@@ -178,8 +189,10 @@ public class CIStatusValidator {
                 return new ValidationResult(false, message);
             }
         } catch (Exception e) {
-            return new ValidationResult(false,
-                    "Failed to get CI Status: " + e.toString() + "\nCI Status Url: " + ciEndpoint + "\nCI Status Body: " + status);
+            return new ValidationResult(
+                    false,
+                    "Failed to get CI Status: " + e.toString() + "\nCI Status Url: " + ciEndpoint + "\nCI Status Body: "
+                            + status);
         }
     }
 
diff --git a/src/main/java/org/apache/sling/cli/impl/http/HttpClientFactory.java b/src/main/java/org/apache/sling/cli/impl/http/HttpClientFactory.java
index 3040429..754bd0b 100644
--- a/src/main/java/org/apache/sling/cli/impl/http/HttpClientFactory.java
+++ b/src/main/java/org/apache/sling/cli/impl/http/HttpClientFactory.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.http;
 
@@ -40,16 +42,16 @@ import org.osgi.service.component.annotations.Reference;
 
 @Component(service = HttpClientFactory.class)
 public class HttpClientFactory {
-    
+
     private static final String DEFAULT_JIRA_HOST = "issues.apache.org";
     private static final int DEFAULT_JIRA_PORT = 443;
 
     private static final String DEFAULT_NEXUS_HOST = "repository.apache.org";
     private static final int DEFAULT_NEXUS_PORT = 443;
-    
+
     @Reference
     private CredentialsService credentialsService;
-    
+
     private String jiraHost;
     private int jiraPort;
     private String nexusHost;
@@ -69,12 +71,15 @@ public class HttpClientFactory {
         return HttpClients.custom()
                 .setDefaultCredentialsProvider(newCredentialsProvider())
                 .addInterceptorFirst(
-                        (HttpRequestInterceptor) (request, context) ->
-                        urlHolder[0] = ((HttpRequestWrapper) request).getOriginal().getRequestLine().getUri()
-                )
+                        (HttpRequestInterceptor) (request, context) -> urlHolder[0] = ((HttpRequestWrapper) request)
+                                .getOriginal()
+                                .getRequestLine()
+                                .getUri())
                 .addInterceptorFirst((HttpResponseInterceptor) (response, context) -> {
                     if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
-                        throw new IllegalStateException("Server returned a 401 status; please check your authentication details for " + urlHolder[0]);
+                        throw new IllegalStateException(
+                                "Server returned a 401 status; please check your authentication details for "
+                                        + urlHolder[0]);
                     }
                 })
                 .build();
@@ -84,25 +89,27 @@ public class HttpClientFactory {
         Credentials asf = credentialsService.getAsfCredentials();
 
         BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(new AuthScope(nexusHost, nexusPort),
+        credentialsProvider.setCredentials(
+                new AuthScope(nexusHost, nexusPort),
                 new UsernamePasswordCredentials(asf.getUsername(), asf.getPassword()));
-        credentialsProvider.setCredentials(new AuthScope("reporter.apache.org", 443), 
+        credentialsProvider.setCredentials(
+                new AuthScope("reporter.apache.org", 443),
                 new UsernamePasswordCredentials(asf.getUsername(), asf.getPassword()));
-        credentialsProvider.setCredentials(new AuthScope(jiraHost, jiraPort), 
+        credentialsProvider.setCredentials(
+                new AuthScope(jiraHost, jiraPort),
                 new UsernamePasswordCredentials(asf.getUsername(), asf.getPassword()));
         return credentialsProvider;
     }
-    
+
     public HttpClientContext newPreemptiveAuthenticationContext() {
-        
+
         AuthCache authCache = new BasicAuthCache();
         authCache.put(new HttpHost(jiraHost, jiraPort, "https"), new BasicScheme());
-        
+
         HttpClientContext ctx = HttpClientContext.create();
         ctx.setAuthCache(authCache);
         ctx.setCredentialsProvider(newCredentialsProvider());
-        
+
         return ctx;
     }
-    
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdater.java b/src/main/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdater.java
index 52bd1a4..3cfec67 100644
--- a/src/main/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdater.java
+++ b/src/main/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdater.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jbake;
 
@@ -29,112 +31,111 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 public class JBakeContentUpdater {
-    
-    private static final Pattern DOWNLOAD_LINE_PATTERN = Pattern.compile("^.*\"([a-zA-Z\\s\\-]+)\\|([a-zA-Z\\.\\-]+)\\|([0-9\\.\\-]+).*$");
 
-    public int updateDownloads(Path downloadsTemplatePath, String newReleaseName, String newReleaseVersion) throws IOException {
-        
+    private static final Pattern DOWNLOAD_LINE_PATTERN =
+            Pattern.compile("^.*\"([a-zA-Z\\s\\-]+)\\|([a-zA-Z\\.\\-]+)\\|([0-9\\.\\-]+).*$");
+
+    public int updateDownloads(Path downloadsTemplatePath, String newReleaseName, String newReleaseVersion)
+            throws IOException {
+
         int[] changeCount = new int[1];
-        
+
         List<String> updatedLines = Files.readAllLines(downloadsTemplatePath, StandardCharsets.UTF_8).stream()
                 .map(line -> {
                     Matcher matcher = DOWNLOAD_LINE_PATTERN.matcher(line);
-                    if ( !matcher.find() )
-                        return line;
-                    
-                    if ( ! matcher.group(1).equals(newReleaseName) )
-                        return line;
-                    
+                    if (!matcher.find()) return line;
+
+                    if (!matcher.group(1).equals(newReleaseName)) return line;
+
                     changeCount[0]++;
-                    
+
                     StringBuilder buffer = new StringBuilder();
                     buffer.append(line.substring(0, matcher.start(3)));
                     buffer.append(newReleaseVersion);
                     buffer.append(line.substring(matcher.end(3)));
-                    
+
                     return buffer.toString();
-                }).collect(Collectors.toList());
+                })
+                .collect(Collectors.toList());
 
         Files.write(downloadsTemplatePath, updatedLines);
-        
+
         return changeCount[0];
     }
 
-    public void updateReleases(Path releasesPath, String releaseName, String releaseVersion, LocalDateTime releaseTime) throws IOException {
-        
+    public void updateReleases(Path releasesPath, String releaseName, String releaseVersion, LocalDateTime releaseTime)
+            throws IOException {
+
         List<String> releasesLines = Files.readAllLines(releasesPath, StandardCharsets.UTF_8);
         String dateHeader = "## " + releaseTime.format(DateTimeFormatter.ofPattern("MMMM uuuu", Locale.ENGLISH));
-        
+
         int releaseLineIdx = -1;
         int dateLineIdx = -1;
-        for ( int i = 0 ; i < releasesLines.size(); i++ ) {
+        for (int i = 0; i < releasesLines.size(); i++) {
             String releasesLine = releasesLines.get(i);
-            if ( releasesLine.startsWith("This is a list of all our releases") ) {
+            if (releasesLine.startsWith("This is a list of all our releases")) {
                 releaseLineIdx = i;
             }
-            if ( releasesLine.equals(dateHeader) ) {
+            if (releasesLine.equals(dateHeader)) {
                 dateLineIdx = i;
             }
         }
-        
-        if ( dateLineIdx == -1 ) {
+
+        if (dateLineIdx == -1) {
             // need to add month marker
             releasesLines.add(releaseLineIdx + 1, "");
             releasesLines.add(releaseLineIdx + 2, dateHeader);
             releasesLines.add(releaseLineIdx + 3, "");
             dateLineIdx = releaseLineIdx + 2;
         }
-        
+
         String date = formattedDay(releaseTime);
-        
+
         // inspect all lines in the current month ( until empty line found )
         // to see if the release date already exists
         boolean changed = false;
-        for ( int i = dateLineIdx +2 ; i < releasesLines.size(); i++ ) {
+        for (int i = dateLineIdx + 2; i < releasesLines.size(); i++) {
             String potentialLine = releasesLines.get(i);
-            if ( potentialLine.trim().isEmpty() )
-                break;
-            
-            if ( potentialLine.endsWith("(" +date+")") ) {
-                if ( potentialLine.contains(releaseName + " " + releaseVersion ) ) {
+            if (potentialLine.trim().isEmpty()) break;
+
+            if (potentialLine.endsWith("(" + date + ")")) {
+                if (potentialLine.contains(releaseName + " " + releaseVersion)) {
                     changed = true;
                     break;
                 }
-                
+
                 int insertionIdx = potentialLine.indexOf('(') - 1;
                 StringBuilder buffer = new StringBuilder();
-                buffer
-                    .append(potentialLine.substring(0, insertionIdx))
-                    .append(", ")
-                    .append(releaseName)
-                    .append(' ')
-                    .append(releaseVersion)
-                    .append(' ')
-                    .append(potentialLine.substring(insertionIdx + 1));
-                
+                buffer.append(potentialLine.substring(0, insertionIdx))
+                        .append(", ")
+                        .append(releaseName)
+                        .append(' ')
+                        .append(releaseVersion)
+                        .append(' ')
+                        .append(potentialLine.substring(insertionIdx + 1));
+
                 releasesLines.set(i, buffer.toString());
                 changed = true;
                 break;
             }
         }
-        
-        if ( !changed )
-            releasesLines.add(dateLineIdx + 2, "* " + releaseName + " " + releaseVersion +" (" + date + ")");
+
+        if (!changed) releasesLines.add(dateLineIdx + 2, "* " + releaseName + " " + releaseVersion + " (" + date + ")");
 
         Files.write(releasesPath, releasesLines);
     }
-    
+
     private String formattedDay(LocalDateTime releaseTime) {
         String date = releaseTime.format(DateTimeFormatter.ofPattern("d", Locale.ENGLISH));
         switch (date) {
-        case "1":
-            return "1st";
-        case "2":
-            return "2nd";
-        case "3":
-            return "3rd";
-        default:
-            return date + "th";
+            case "1":
+                return "1st";
+            case "2":
+                return "2nd";
+            case "3":
+                return "3rd";
+            default:
+                return date + "th";
         }
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/ErrorResponse.java b/src/main/java/org/apache/sling/cli/impl/jira/ErrorResponse.java
index a0dc3eb..4633bff 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/ErrorResponse.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/ErrorResponse.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -22,15 +24,15 @@ import java.util.List;
 import java.util.Map;
 
 class ErrorResponse {
-    
+
     private List<String> errorMessages = new ArrayList<>();
     private Map<String, String> errors = new HashMap<>();
-    
+
     public List<String> getErrorMessages() {
         return errorMessages;
     }
-    
+
     public Map<String, String> getErrors() {
         return errors;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/Issue.java b/src/main/java/org/apache/sling/cli/impl/jira/Issue.java
index 87c474f..8109f60 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/Issue.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/Issue.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -21,15 +23,15 @@ public class Issue {
     private int id;
     private String key;
     private Fields fields;
-    
+
     public int getId() {
         return id;
     }
-    
+
     public String getKey() {
         return key;
     }
-    
+
     public String getSummary() {
         return fields.summary;
     }
@@ -47,7 +49,7 @@ public class Issue {
         }
         return null;
     }
-    
+
     static class Fields {
         private String summary;
         private Status status;
@@ -84,6 +86,6 @@ public class Issue {
 
     @Override
     public String toString() {
-        return getClass().getSimpleName() + "[" +  key + " : " + getSummary() + " ]"; 
+        return getClass().getSimpleName() + "[" + key + " : " + getSummary() + " ]";
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/IssueResponse.java b/src/main/java/org/apache/sling/cli/impl/jira/IssueResponse.java
index 0cf5697..13c223d 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/IssueResponse.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/IssueResponse.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -21,7 +23,7 @@ import java.util.List;
 public class IssueResponse {
 
     private List<Issue> issues;
-    
+
     public List<Issue> getIssues() {
         return issues;
     }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/IssueUpdate.java b/src/main/java/org/apache/sling/cli/impl/jira/IssueUpdate.java
index 8009fc1..b78142c 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/IssueUpdate.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/IssueUpdate.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -23,22 +25,22 @@ import java.util.List;
 import java.util.Map;
 
 public class IssueUpdate {
-    
+
     private Map<String, List<Map<String, Op>>> update = new HashMap<>();
-    
+
     public void recordAdd(String fieldName, String value) {
-        
+
         List<Map<String, Op>> ops = update.computeIfAbsent(fieldName, k -> new ArrayList<>());
-        
+
         Op op = new Op();
         op.name = value;
         ops.add(Collections.singletonMap("add", op));
     }
 
     public void recordRemove(String fieldName, String value) {
-        
+
         List<Map<String, Op>> ops = update.computeIfAbsent(fieldName, k -> new ArrayList<>());
-        
+
         Op op = new Op();
         op.name = value;
         ops.add(Collections.singletonMap("remove", op));
@@ -46,7 +48,7 @@ public class IssueUpdate {
 
     static class Op {
         private String name;
-        
+
         public String getName() {
             return name;
         }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/Transition.java b/src/main/java/org/apache/sling/cli/impl/jira/Transition.java
index e5a10df..1d32d78 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/Transition.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/Transition.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.jira;
 
 public class Transition {
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/TransitionsResponse.java b/src/main/java/org/apache/sling/cli/impl/jira/TransitionsResponse.java
index f8f593a..4ee08d9 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/TransitionsResponse.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/TransitionsResponse.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.jira;
 
 import java.util.List;
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/Version.java b/src/main/java/org/apache/sling/cli/impl/jira/Version.java
index 0e9dffb..06c2e36 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/Version.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/Version.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -39,11 +41,11 @@ public class Version {
     public void setName(String name) {
         this.name = name;
     }
-    
+
     public int getIssuesFixedCount() {
         return issuesFixedCount;
     }
-    
+
     public void setRelatedIssuesCount(int relatedIssuesCount) {
         this.issuesFixedCount = relatedIssuesCount;
     }
@@ -66,7 +68,7 @@ public class Version {
 
     @Override
     public String toString() {
-        
-        return "Version: " + name + " (id=" + id+", fixed issues="+issuesFixedCount+")";
+
+        return "Version: " + name + " (id=" + id + ", fixed issues=" + issuesFixedCount + ")";
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
index f2daeed..927342b 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -29,6 +31,11 @@ import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonIOException;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonWriter;
 import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -51,12 +58,6 @@ import org.osgi.util.promise.PromiseFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonIOException;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
-import com.google.gson.stream.JsonWriter;
-
 /**
  * Access the ASF <em>Jira</em> instance and looks up project version data.
  */
@@ -89,87 +90,86 @@ public class VersionClient {
 
     /**
      * Finds a Jira version which matches the specified release
-     * 
+     *
      * @param release the release
      * @return the version
      * @throws IllegalArgumentException when no matching Jira release is found
      */
     public Version find(Release release) {
         Version version;
-        
+
         try (CloseableHttpClient client = httpClientFactory.newClient()) {
-            version = findVersion( v -> release.getName().equals(v.getName()), client)
-                    .orElseThrow( () -> new IllegalArgumentException("No version found with name " + release.getName()));
+            version = findVersion(v -> release.getName().equals(v.getName()), client)
+                    .orElseThrow(() -> new IllegalArgumentException("No version found with name " + release.getName()));
             populateRelatedIssuesCount(client, version);
-        } catch ( IOException e ) {
+        } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        
+
         return version;
     }
 
     /**
      * Finds a version that is the successor of the version of the specified
      * <code>release</code>
-     * 
+     *
      * <p>
      * A successor has the same base name but a higher version. For instance, the
      * <em>XSS Protection API 2.1.6</em> is succeeded by <em>XSS Protection API
      * 2.1.8</em>.
      * </p>
-     * 
+     *
      * <p>
      * If multiple successors are found the one which is closest in terms of
      * versioning is returned.
      * </p>
-     * 
+     *
      * @param release the release to find a successor for
      * @return the successor version, possibly <code>null</code>
      */
     public Version findSuccessorVersion(Release release) {
         Version version;
-        
+
         try (CloseableHttpClient client = httpClientFactory.newClient()) {
-            Optional<Version> opt = findVersion ( 
-                    v -> isFollowingVersion(Release.fromString(v.getName()).get(0), release)
-                    ,client);
-            if (opt.isEmpty())
-                return null;
+            Optional<Version> opt = findVersion(
+                    v -> isFollowingVersion(Release.fromString(v.getName()).get(0), release), client);
+            if (opt.isEmpty()) return null;
             version = opt.get();
             populateRelatedIssuesCount(client, version);
-        } catch ( IOException e ) {
+        } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        
+
         return version;
     }
-    
+
     /**
      * Creates a version with the specified name
-     * 
+     *
      * <p>The version will be created for the {@value #PROJECT_KEY} project.</p>
-     * 
+     *
      * @param versionName the name of the version
      * @throws IOException In case of any errors creating the version in Jira
      */
     public void create(String versionName) throws IOException {
-        
+
         StringWriter w = new StringWriter();
-        try ( JsonWriter jw = new Gson().newJsonWriter(w) ) {
+        try (JsonWriter jw = new Gson().newJsonWriter(w)) {
             jw.beginObject();
             jw.name("name").value(versionName);
             jw.name("project").value(PROJECT_KEY);
             jw.endObject();
         }
-        
+
         HttpPost post = newPost("version");
         post.setEntity(new StringEntity(w.toString()));
 
         try (CloseableHttpClient client = httpClientFactory.newClient()) {
-            try (CloseableHttpResponse response = client.execute(post, httpClientFactory.newPreemptiveAuthenticationContext())) {
+            try (CloseableHttpResponse response =
+                    client.execute(post, httpClientFactory.newPreemptiveAuthenticationContext())) {
                 try (InputStream content = response.getEntity().getContent();
                         InputStreamReader reader = new InputStreamReader(content)) {
-                    
+
                     if (response.getStatusLine().getStatusCode() != 201) {
                         throw newException(response, reader);
                     }
@@ -190,27 +190,32 @@ public class VersionClient {
         post.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return post;
     }
-    
+
     private HttpPut newPut(String suffix) {
         HttpPut put = new HttpPut(jiraRESTAPIEntrypoint + suffix);
         put.addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE_JSON);
         put.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return put;
     }
-    
+
     public List<Issue> findUnresolvedIssues(Release release) throws IOException {
-        return findIssues(release).stream().filter(issue -> issue.getResolution() == null).collect(Collectors.toList());
+        return findIssues(release).stream()
+                .filter(issue -> issue.getResolution() == null)
+                .collect(Collectors.toList());
     }
 
     public List<Issue> findFixedIssues(Release release) throws IOException {
-        return findIssues(release).stream().filter(issue -> issue.getResolution() != null).collect(Collectors.toList());
+        return findIssues(release).stream()
+                .filter(issue -> issue.getResolution() != null)
+                .collect(Collectors.toList());
     }
 
     private void closeIssues(List<Issue> issues) throws Exception {
         List<Promise<Issue>> closedIssues = new ArrayList<>();
         for (Issue issue : issues) {
             if (!"Closed".equals(issue.getStatus())) {
-                closedIssues.add(getCloseTransition(issue).then(closeTransition -> closeIssue(issue, closeTransition.getValue())));
+                closedIssues.add(getCloseTransition(issue)
+                        .then(closeTransition -> closeIssue(issue, closeTransition.getValue())));
             }
         }
         Promise<List<Issue>> closedFixedIssues = promiseFactory.all(closedIssues);
@@ -244,16 +249,22 @@ public class VersionClient {
                 HttpPut put = newPut("version/" + version.getId());
                 StringWriter w = new StringWriter();
                 try (JsonWriter jw = new Gson().newJsonWriter(w)) {
-                    jw.beginObject().name("released").value(true).name("releaseDate").value(dateProvider.getCurrentDateForJiraRelease())
+                    jw.beginObject()
+                            .name("released")
+                            .value(true)
+                            .name("releaseDate")
+                            .value(dateProvider.getCurrentDateForJiraRelease())
                             .endObject();
                 }
                 put.setEntity(new StringEntity(w.toString()));
                 try (CloseableHttpClient client = httpClientFactory.newClient()) {
-                    try (CloseableHttpResponse response = client.execute(put, httpClientFactory.newPreemptiveAuthenticationContext())) {
+                    try (CloseableHttpResponse response =
+                            client.execute(put, httpClientFactory.newPreemptiveAuthenticationContext())) {
                         int statusCode = response.getStatusLine().getStatusCode();
                         if (statusCode != 200) {
-                            throw new IOException(String.format("Unable to mark %s as released. Got status code %d.", release.getFullName(),
-                                    statusCode));
+                            throw new IOException(String.format(
+                                    "Unable to mark %s as released. Got status code %d.",
+                                    release.getFullName(), statusCode));
                         }
                     }
                 }
@@ -261,8 +272,9 @@ public class VersionClient {
                 LOGGER.info("Version {} was already released on {}.", version.getName(), version.getReleaseDate());
             }
         } else {
-            String report =
-                    unresolvedIssues.stream().map(issue -> String.format("%s/browse/%s", jiraURL, issue.getKey())).collect(Collectors.joining(System.lineSeparator()));
+            String report = unresolvedIssues.stream()
+                    .map(issue -> String.format("%s/browse/%s", jiraURL, issue.getKey()))
+                    .collect(Collectors.joining(System.lineSeparator()));
             throw new IllegalStateException("The following issues are not fixed:\n" + report);
         }
     }
@@ -271,15 +283,15 @@ public class VersionClient {
         try {
             HttpGet get = newGet("search");
             URIBuilder builder = new URIBuilder(get.getURI());
-            builder.addParameter("jql",
-                    String.format("project = %s AND fixVersion = \"%s\"", PROJECT_KEY, release.getName()));
+            builder.addParameter(
+                    "jql", String.format("project = %s AND fixVersion = \"%s\"", PROJECT_KEY, release.getName()));
             builder.addParameter("fields", "summary,status,resolution");
             get.setURI(builder.build());
 
             try (CloseableHttpClient client = httpClientFactory.newClient()) {
                 try (CloseableHttpResponse response = client.execute(get)) {
                     try (InputStream content = response.getEntity().getContent();
-                         InputStreamReader reader = new InputStreamReader(content)) {
+                            InputStreamReader reader = new InputStreamReader(content)) {
 
                         if (response.getStatusLine().getStatusCode() != 200) {
                             throw newException(response, reader);
@@ -296,62 +308,63 @@ public class VersionClient {
     }
 
     private IOException newException(CloseableHttpResponse response, InputStreamReader reader) {
-        
+
         StringBuilder message = new StringBuilder();
         message.append("Status line : ").append(response.getStatusLine());
-        
+
         try {
             Gson gson = new Gson();
             ErrorResponse errors = gson.fromJson(reader, ErrorResponse.class);
-            if ( errors != null ) {
-                if ( !errors.getErrorMessages().isEmpty() )
-                    message.append(". Error messages: ")
-                        .append(errors.getErrorMessages());
-                
-                if ( !errors.getErrors().isEmpty() )
-                    errors.getErrors().forEach((key, value) -> message.append(". Error for ").append(key).append(" : ").append(value));
+            if (errors != null) {
+                if (!errors.getErrorMessages().isEmpty())
+                    message.append(". Error messages: ").append(errors.getErrorMessages());
+
+                if (!errors.getErrors().isEmpty())
+                    errors.getErrors().forEach((key, value) -> message.append(". Error for ")
+                            .append(key)
+                            .append(" : ")
+                            .append(value));
             }
-        } catch ( JsonIOException | JsonSyntaxException e) {
+        } catch (JsonIOException | JsonSyntaxException e) {
             message.append(". Failed parsing response as JSON ( ")
-                .append(e.getMessage())
-                .append(" )");
+                    .append(e.getMessage())
+                    .append(" )");
         }
-        
+
         return new IOException(message.toString());
     }
 
     private Optional<Version> findVersion(Predicate<Version> matcher, CloseableHttpClient client) throws IOException {
-        
+
         HttpGet get = newGet("project/" + PROJECT_KEY + "/versions");
         try (CloseableHttpResponse response = client.execute(get)) {
             try (InputStream content = response.getEntity().getContent();
                     InputStreamReader reader = new InputStreamReader(content)) {
-                if (response.getStatusLine().getStatusCode() != 200)
-                    throw newException(response, reader);
-                
+                if (response.getStatusLine().getStatusCode() != 200) throw newException(response, reader);
+
                 Gson gson = new Gson();
-                Type collectionType = TypeToken.getParameterized(List.class, Version.class).getType();
+                Type collectionType =
+                        TypeToken.getParameterized(List.class, Version.class).getType();
                 List<Version> versions = gson.fromJson(reader, collectionType);
                 return versions.stream()
-                        .filter( v -> v.getName().length() > 1) // avoid old '3' release
+                        .filter(v -> v.getName().length() > 1) // avoid old '3' release
                         .filter(matcher)
                         .min(VersionClient::compare);
             }
         }
     }
-        
+
     private void populateRelatedIssuesCount(CloseableHttpClient client, Version version) throws IOException {
-        
-        HttpGet get = newGet("version/" + version.getId() +"/relatedIssueCounts");
+
+        HttpGet get = newGet("version/" + version.getId() + "/relatedIssueCounts");
         try (CloseableHttpResponse response = client.execute(get)) {
             try (InputStream content = response.getEntity().getContent();
                     InputStreamReader reader = new InputStreamReader(content)) {
-                if (response.getStatusLine().getStatusCode() != 200)
-                    throw newException(response, reader);
+                if (response.getStatusLine().getStatusCode() != 200) throw newException(response, reader);
 
                 Gson gson = new Gson();
                 VersionRelatedIssuesCount issuesCount = gson.fromJson(reader, VersionRelatedIssuesCount.class);
-                
+
                 version.setRelatedIssuesCount(issuesCount.getIssuesFixedCount());
             }
         }
@@ -360,17 +373,18 @@ public class VersionClient {
     private boolean isFollowingVersion(Release base, Release candidate) {
         return base.getComponent().equals(candidate.getComponent())
                 && new org.osgi.framework.Version(base.getVersion())
-                    .compareTo(new org.osgi.framework.Version(candidate.getVersion())) > 0;
+                                .compareTo(new org.osgi.framework.Version(candidate.getVersion()))
+                        > 0;
     }
-    
+
     private static int compare(Version v1, Version v2) {
         // version names will never map to multiple release names
         Release r1 = Release.fromString(v1.getName()).get(0);
         Release r2 = Release.fromString(v2.getName()).get(0);
-        
+
         org.osgi.framework.Version ver1 = new org.osgi.framework.Version(r1.getVersion());
         org.osgi.framework.Version ver2 = new org.osgi.framework.Version(r2.getVersion());
-        
+
         return ver1.compareTo(ver2);
     }
 
@@ -389,29 +403,29 @@ public class VersionClient {
     }
 
     public void moveIssuesToNewVersion(Version oldVersion, Version newVersion, List<Issue> issues) {
-        issues.forEach( i -> moveIssueToNewVersion(oldVersion, newVersion, i));
-        
+        issues.forEach(i -> moveIssueToNewVersion(oldVersion, newVersion, i));
     }
-    
+
     private void moveIssueToNewVersion(Version oldVersion, Version newVersion, Issue issue) {
         try {
             StringWriter w = new StringWriter();
-            
+
             IssueUpdate update = new IssueUpdate();
             update.recordAdd("fixVersions", newVersion.getName());
             update.recordRemove("fixVersions", oldVersion.getName());
             Gson gson = new Gson();
             gson.toJson(update, w);
-            
+
             HttpPut put = newPut("issue/" + issue.getKey());
             put.setEntity(new StringEntity(w.toString(), StandardCharsets.UTF_8));
 
             try (CloseableHttpClient client = httpClientFactory.newClient()) {
-                try (CloseableHttpResponse response = client.execute(put, httpClientFactory.newPreemptiveAuthenticationContext())) {
+                try (CloseableHttpResponse response =
+                        client.execute(put, httpClientFactory.newPreemptiveAuthenticationContext())) {
                     if (response.getStatusLine().getStatusCode() != 204) {
                         try (InputStream content = response.getEntity().getContent();
                                 InputStreamReader reader = new InputStreamReader(content)) {
-                                throw newException(response, reader);
+                            throw newException(response, reader);
                         }
                     }
                 }
@@ -425,22 +439,25 @@ public class VersionClient {
         HttpGet get = newGet("issue/" + issue.getId() + "/transitions");
         try {
             try (CloseableHttpClient client = httpClientFactory.newClient()) {
-                try (CloseableHttpResponse getResponse = client.execute(get, httpClientFactory.newPreemptiveAuthenticationContext())) {
+                try (CloseableHttpResponse getResponse =
+                        client.execute(get, httpClientFactory.newPreemptiveAuthenticationContext())) {
                     try (InputStream getContent = getResponse.getEntity().getContent();
-                         InputStreamReader getReader = new InputStreamReader(getContent)) {
+                            InputStreamReader getReader = new InputStreamReader(getContent)) {
                         if (getResponse.getStatusLine().getStatusCode() != 200) {
                             throw newException(getResponse, getReader);
                         }
                         Gson gson = new Gson();
-                        List<Transition> transitions = gson.fromJson(getReader, TransitionsResponse.class).getTransitions();
-                        Optional<Transition> transition = transitions.stream().filter(t -> "Close Issue".equals(t.getName())).findFirst();
+                        List<Transition> transitions = gson.fromJson(getReader, TransitionsResponse.class)
+                                .getTransitions();
+                        Optional<Transition> transition = transitions.stream()
+                                .filter(t -> "Close Issue".equals(t.getName()))
+                                .findFirst();
                         if (transition.isPresent()) {
                             return promiseFactory.resolved(transition.get());
                         } else {
-                            return promiseFactory
-                                    .failed(new IllegalStateException(String.format("Issue %s/browse/%s cannot be closed - missing Close " +
-                                                    "transition.", jiraURL,
-                                            issue.getKey())));
+                            return promiseFactory.failed(new IllegalStateException(String.format(
+                                    "Issue %s/browse/%s cannot be closed - missing Close " + "transition.",
+                                    jiraURL, issue.getKey())));
                         }
                     }
                 }
@@ -454,15 +471,25 @@ public class VersionClient {
         HttpPost post = newPost("issue/" + issue.getId() + "/transitions");
         StringWriter w = new StringWriter();
         try (JsonWriter jw = new Gson().newJsonWriter(w)) {
-            jw.beginObject().name("transition").beginObject().name("id").value(closeTransition.getId()).endObject().endObject();
+            jw.beginObject()
+                    .name("transition")
+                    .beginObject()
+                    .name("id")
+                    .value(closeTransition.getId())
+                    .endObject()
+                    .endObject();
             post.setEntity(new StringEntity(w.toString()));
             try (CloseableHttpClient client = httpClientFactory.newClient()) {
-                try (CloseableHttpResponse postResponse = client.execute(post, httpClientFactory.newPreemptiveAuthenticationContext())) {
+                try (CloseableHttpResponse postResponse =
+                        client.execute(post, httpClientFactory.newPreemptiveAuthenticationContext())) {
                     if (postResponse.getStatusLine().getStatusCode() == 204) {
                         return promiseFactory.resolved(issue);
                     } else {
-                        return promiseFactory.failed(new RuntimeException(String.format("Unable to close issue %s/browse/%s - got status code %d.",
-                         jiraURL, issue.getKey(), postResponse.getStatusLine().getStatusCode())));
+                        return promiseFactory.failed(new RuntimeException(String.format(
+                                "Unable to close issue %s/browse/%s - got status code %d.",
+                                jiraURL,
+                                issue.getKey(),
+                                postResponse.getStatusLine().getStatusCode())));
                     }
                 }
             }
diff --git a/src/main/java/org/apache/sling/cli/impl/mail/Email.java b/src/main/java/org/apache/sling/cli/impl/mail/Email.java
index e11bfaa..c8655d7 100644
--- a/src/main/java/org/apache/sling/cli/impl/mail/Email.java
+++ b/src/main/java/org/apache/sling/cli/impl/mail/Email.java
@@ -1,29 +1,23 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.mail;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.Properties;
-
 import javax.mail.Address;
 import javax.mail.BodyPart;
 import javax.mail.Message;
@@ -33,6 +27,14 @@ import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.utils.URIBuilder;
@@ -49,7 +51,9 @@ public class Email {
     public Email(String id) {
         this.id = id;
         try (CloseableHttpClient client = HttpClients.createDefault()) {
-            URI uri = new URIBuilder("https://lists.apache.org/api/source.lua/" + URLEncoder.encode(id, StandardCharsets.UTF_8)).build();
+            URI uri = new URIBuilder(
+                            "https://lists.apache.org/api/source.lua/" + URLEncoder.encode(id, StandardCharsets.UTF_8))
+                    .build();
             HttpGet get = new HttpGet(uri);
             try (CloseableHttpResponse response = client.execute(get)) {
                 try (InputStream content = response.getEntity().getContent()) {
@@ -82,7 +86,6 @@ public class Email {
         return subject;
     }
 
-
     public String getBody() {
         return body;
     }
@@ -98,8 +101,7 @@ public class Email {
         return result;
     }
 
-    private String getTextFromMimeMultipart(
-            MimeMultipart mimeMultipart) throws MessagingException, IOException {
+    private String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException {
         StringBuilder result = new StringBuilder();
         int count = mimeMultipart.getCount();
         for (int i = 0; i < count; i++) {
@@ -112,5 +114,4 @@ public class Email {
         }
         return result.toString();
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java b/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
index 1a3d2ee..c8d2657 100644
--- a/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
+++ b/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
@@ -1,33 +1,33 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.mail;
 
-import java.io.ByteArrayInputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.Properties;
-
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.MimeMessage;
 import javax.net.ssl.SSLContext;
 
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+
 import org.apache.sling.cli.impl.Credentials;
 import org.apache.sling.cli.impl.CredentialsService;
 import org.osgi.service.component.annotations.Component;
@@ -35,14 +35,13 @@ import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component(
-        service = Mailer.class
-)
+@Component(service = Mailer.class)
 public class Mailer {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(Mailer.class);
 
     private static final Properties SMTP_PROPERTIES = new Properties();
+
     static {
         try {
             SMTP_PROPERTIES.put("mail.smtp.host", "mail-relay.apache.org");
@@ -50,9 +49,11 @@ public class Mailer {
             SMTP_PROPERTIES.put("mail.smtp.auth", "true");
             SMTP_PROPERTIES.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
             SMTP_PROPERTIES.put("mail.smtp.socketFactory.fallback", "false");
-            SMTP_PROPERTIES.put("mail.smtp.ssl.protocols",
-                    String.join(" ", SSLContext.getDefault().getSupportedSSLParameters().getProtocols())
-            );
+            SMTP_PROPERTIES.put(
+                    "mail.smtp.ssl.protocols",
+                    String.join(
+                            " ",
+                            SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -65,13 +66,12 @@ public class Mailer {
         Properties properties = new Properties(SMTP_PROPERTIES);
         Session session = Session.getInstance(properties);
         try {
-            MimeMessage message = new MimeMessage(session, new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8)));
+            MimeMessage message =
+                    new MimeMessage(session, new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8)));
             Credentials credentials = credentialsService.getAsfCredentials();
             Transport.send(message, credentials.getUsername(), credentials.getPassword());
         } catch (MessagingException e) {
             LOGGER.error(String.format("Unable to send the following email:%n%s", source), e);
         }
-
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/mail/VoteThreadFinder.java b/src/main/java/org/apache/sling/cli/impl/mail/VoteThreadFinder.java
index a72255b..ed8bf6e 100644
--- a/src/main/java/org/apache/sling/cli/impl/mail/VoteThreadFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/mail/VoteThreadFinder.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.mail;
 
@@ -24,6 +26,9 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.utils.URIBuilder;
@@ -31,10 +36,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.osgi.service.component.annotations.Component;
 
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
-
 @Component(service = VoteThreadFinder.class)
 public class VoteThreadFinder {
 
@@ -51,21 +52,25 @@ public class VoteThreadFinder {
             HttpGet get = new HttpGet(uri);
             try (CloseableHttpResponse response = client.execute(get)) {
                 try (InputStream content = response.getEntity().getContent();
-                     InputStreamReader reader = new InputStreamReader(content)) {
+                        InputStreamReader reader = new InputStreamReader(content)) {
                     if (response.getStatusLine().getStatusCode() != 200) {
                         throw new IOException("Status line : " + response.getStatusLine());
                     }
                     JsonParser parser = new JsonParser();
                     List<Email> emails = new ArrayList<>();
-                    JsonElement emailsJson = parser.parse(reader).getAsJsonObject().get("emails");
+                    JsonElement emailsJson =
+                            parser.parse(reader).getAsJsonObject().get("emails");
                     if (emailsJson == null) {
-                        throw new IllegalStateException(String.format("Unable to correctly parse JSON from %s. Missing \"emails\" " +
-                                "property in the JSON response.", uri.toString()));
+                        throw new IllegalStateException(String.format(
+                                "Unable to correctly parse JSON from %s. Missing \"emails\" "
+                                        + "property in the JSON response.",
+                                uri.toString()));
                     }
                     if (emailsJson.isJsonArray()) {
                         JsonArray emailsArray = emailsJson.getAsJsonArray();
                         for (JsonElement email : emailsArray) {
-                            emails.add(new Email(email.getAsJsonObject().get("id").getAsString()));
+                            emails.add(
+                                    new Email(email.getAsJsonObject().get("id").getAsString()));
                         }
                     }
                     return emails;
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/Artifact.java b/src/main/java/org/apache/sling/cli/impl/nexus/Artifact.java
index 24b45b3..58845b1 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/Artifact.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/Artifact.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.net.URI;
@@ -38,14 +38,21 @@ public class Artifact {
     private final String repositoryRelativeSha1SumPath;
     private final String repositoryRelativeMd5SumPath;
 
-    public Artifact(StagingRepository repository, String groupId, String artifactId, String version, String classifier, String type) {
+    public Artifact(
+            StagingRepository repository,
+            String groupId,
+            String artifactId,
+            String version,
+            String classifier,
+            String type) {
         this.repository = repository;
         this.groupId = groupId;
         this.artifactId = artifactId;
         this.version = version;
         this.classifier = classifier;
         this.type = type;
-        String base = groupId.replaceAll("\\.", "/") + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version;
+        String base =
+                groupId.replaceAll("\\.", "/") + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version;
         StringBuilder stringBuilder = new StringBuilder(base);
         if (this.classifier != null) {
             stringBuilder.append("-").append(this.classifier);
@@ -121,7 +128,8 @@ public class Artifact {
 
     @Override
     public String toString() {
-        return String.format("Artifact {groupId=%s; artifactId=%s; version=%s; classifier=%s; type=%s}", groupId, artifactId, version,
-                classifier, type);
+        return String.format(
+                "Artifact {groupId=%s; artifactId=%s; version=%s; classifier=%s; type=%s}",
+                groupId, artifactId, version, classifier, type);
     }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/LocalRepository.java b/src/main/java/org/apache/sling/cli/impl/nexus/LocalRepository.java
index 5f2b7e0..6d5ffeb 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/LocalRepository.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/LocalRepository.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.nio.file.Path;
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java b/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
index fec188a..31946aa 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
@@ -1,21 +1,31 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.nexus;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -31,14 +41,11 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -58,12 +65,6 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-
 @Component(service = RepositoryService.class)
 public class RepositoryService {
 
@@ -79,6 +80,7 @@ public class RepositoryService {
 
     @Reference
     private HttpClientFactory httpClientFactory;
+
     private String nexusUrlPrefix;
 
     @Activate
@@ -105,7 +107,8 @@ public class RepositoryService {
                     .filter(r -> r.getRepositoryId().startsWith(REPOSITORY_PREFIX))
                     .filter(r -> r.getRepositoryId().endsWith("-" + stagingRepositoryId))
                     .findFirst()
-                    .orElseThrow(() -> new IllegalArgumentException("No repository found with id " + stagingRepositoryId));
+                    .orElseThrow(
+                            () -> new IllegalArgumentException("No repository found with id " + stagingRepositoryId));
         });
     }
 
@@ -114,7 +117,7 @@ public class RepositoryService {
             HttpGet get = newGet("/service/local/staging/profile_repositories");
             try (CloseableHttpResponse response = client.execute(get)) {
                 try (InputStream content = response.getEntity().getContent();
-                     InputStreamReader reader = new InputStreamReader(content)) {
+                        InputStreamReader reader = new InputStreamReader(content)) {
                     if (response.getStatusLine().getStatusCode() != 200) {
                         throw new IOException("Status line : " + response.getStatusLine());
                     }
@@ -138,15 +141,22 @@ public class RepositoryService {
                     try (CloseableHttpClient client = httpClientFactory.newClient()) {
                         for (Artifact artifact : artifacts) {
                             String fileRelativePath = artifact.getRepositoryRelativePath();
-                            String relativeFolderPath = fileRelativePath.substring(0, fileRelativePath.lastIndexOf('/'));
+                            String relativeFolderPath =
+                                    fileRelativePath.substring(0, fileRelativePath.lastIndexOf('/'));
                             Path artifactFolderPath = Files.createDirectories(rootFolder.resolve(relativeFolderPath));
                             downloadFileFromRepository(repository, client, artifactFolderPath, fileRelativePath);
-                            downloadFileFromRepository(repository, client, artifactFolderPath,
+                            downloadFileFromRepository(
+                                    repository,
+                                    client,
+                                    artifactFolderPath,
                                     artifact.getRepositoryRelativeSignaturePath());
-                            downloadFileFromRepository(repository, client, artifactFolderPath,
+                            downloadFileFromRepository(
+                                    repository,
+                                    client,
+                                    artifactFolderPath,
                                     artifact.getRepositoryRelativeSha1SumPath());
-                            downloadFileFromRepository(repository, client, artifactFolderPath,
-                                    artifact.getRepositoryRelativeMd5SumPath());
+                            downloadFileFromRepository(
+                                    repository, client, artifactFolderPath, artifact.getRepositoryRelativeMd5SumPath());
                         }
                     }
                     localRepository = new LocalRepository(repository, artifacts, rootFolder);
@@ -170,12 +180,11 @@ public class RepositoryService {
     public Set<Artifact> getArtifacts(StagingRepository repository) throws IOException {
         Set<Artifact> artifacts = new HashSet<>();
         try (CloseableHttpClient client = httpClientFactory.newClient()) {
-            HttpGet get =
-                    newGet("/service/local/lucene/search?g=org.apache.sling&repositoryId=" +
-                            repository.getRepositoryId());
+            HttpGet get = newGet(
+                    "/service/local/lucene/search?g=org.apache.sling&repositoryId=" + repository.getRepositoryId());
             try (CloseableHttpResponse response = client.execute(get)) {
                 try (InputStream content = response.getEntity().getContent();
-                     InputStreamReader reader = new InputStreamReader(content)) {
+                        InputStreamReader reader = new InputStreamReader(content)) {
                     JsonParser parser = new JsonParser();
                     JsonObject json = parser.parse(reader).getAsJsonObject();
                     JsonArray data = json.get("data").getAsJsonArray();
@@ -185,9 +194,13 @@ public class RepositoryService {
                         String groupId = dataElementJson.get("groupId").getAsString();
                         String artifactId = dataElementJson.get("artifactId").getAsString();
                         String version = dataElementJson.get("version").getAsString();
-                        JsonArray artifactLinksArray =
-                                dataElementJson.get("artifactHits").getAsJsonArray().get(0).getAsJsonObject().get("artifactLinks")
-                                        .getAsJsonArray();
+                        JsonArray artifactLinksArray = dataElementJson
+                                .get("artifactHits")
+                                .getAsJsonArray()
+                                .get(0)
+                                .getAsJsonObject()
+                                .get("artifactLinks")
+                                .getAsJsonArray();
                         for (JsonElement artifactLinkElement : artifactLinksArray) {
                             JsonObject artifactLinkJson = artifactLinkElement.getAsJsonObject();
                             String type = artifactLinkJson.get("extension").getAsString();
@@ -210,7 +223,8 @@ public class RepositoryService {
             try (CloseableHttpResponse response = client.execute(get)) {
                 int statusCode = response.getStatusLine().getStatusCode();
                 if (statusCode != 200) {
-                    throw new IOException(String.format("Got %d instead of 200 when retrieving %s.", statusCode, get.getURI()));
+                    throw new IOException(
+                            String.format("Got %d instead of 200 when retrieving %s.", statusCode, get.getURI()));
                 }
                 consumer.accept(response.getEntity().getContent());
             }
@@ -219,33 +233,47 @@ public class RepositoryService {
 
     public Set<Release> getReleases(StagingRepository stagingRepository) throws IOException {
         Set<Release> releases = new HashSet<>();
-        getArtifacts(stagingRepository).stream().filter(artifact -> "pom".equals(artifact.getType())).forEach(pom -> {
-            try {
-                XPath xPath = xPathFactory.newXPath();
-                processArtifactStream(pom, stream -> {
+        getArtifacts(stagingRepository).stream()
+                .filter(artifact -> "pom".equals(artifact.getType()))
+                .forEach(pom -> {
                     try {
-                        DocumentBuilder builder = builderFactory.newDocumentBuilder();
-                        Document xmlDocument = builder.parse(stream);
-                        String name = (String) xPath.compile("/project/name/text()").evaluate(xmlDocument, XPathConstants.STRING);
-                        String version = (String) xPath.compile("/project/version/text()").evaluate(xmlDocument, XPathConstants.STRING);
-                        try {
-                            releases.addAll(Release.fromString(name + " " + version));
-                        } catch (IllegalArgumentException e) {
-                            LOGGER.error(String.format("Unable to determine a valid release from '%s %s'", name, version), e);
-                        }
-                    } catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException e) {
+                        XPath xPath = xPathFactory.newXPath();
+                        processArtifactStream(pom, stream -> {
+                            try {
+                                DocumentBuilder builder = builderFactory.newDocumentBuilder();
+                                Document xmlDocument = builder.parse(stream);
+                                String name = (String) xPath.compile("/project/name/text()")
+                                        .evaluate(xmlDocument, XPathConstants.STRING);
+                                String version = (String) xPath.compile("/project/version/text()")
+                                        .evaluate(xmlDocument, XPathConstants.STRING);
+                                try {
+                                    releases.addAll(Release.fromString(name + " " + version));
+                                } catch (IllegalArgumentException e) {
+                                    LOGGER.error(
+                                            String.format(
+                                                    "Unable to determine a valid release from '%s %s'", name, version),
+                                            e);
+                                }
+                            } catch (ParserConfigurationException
+                                    | SAXException
+                                    | XPathExpressionException
+                                    | IOException e) {
+                                LOGGER.error(String.format("Unable to process artifact %s.", pom), e);
+                            }
+                        });
+                    } catch (IOException e) {
                         LOGGER.error(String.format("Unable to process artifact %s.", pom), e);
                     }
                 });
-            } catch (IOException e) {
-                LOGGER.error(String.format("Unable to process artifact %s.", pom), e);
-            }
-        });
         return Set.copyOf(releases);
     }
 
-    private void downloadFileFromRepository(@NotNull StagingRepository repository, @NotNull CloseableHttpClient client,
-                                            @NotNull Path artifactFolderPath, @NotNull String relativeFilePath) throws IOException {
+    private void downloadFileFromRepository(
+            @NotNull StagingRepository repository,
+            @NotNull CloseableHttpClient client,
+            @NotNull Path artifactFolderPath,
+            @NotNull String relativeFilePath)
+            throws IOException {
         String fileName = relativeFilePath.substring(relativeFilePath.lastIndexOf('/') + 1);
         Path filePath = Files.createFile(artifactFolderPath.resolve(fileName));
         HttpGet get = new HttpGet(repository.getRepositoryURI() + "/" + relativeFilePath);
@@ -264,5 +292,4 @@ public class RepositoryService {
         get.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return get;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepositories.java b/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepositories.java
index 84e1a77..b62ffde 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepositories.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepositories.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.nexus;
 
@@ -29,5 +31,4 @@ public class StagingRepositories {
     public void setData(List<StagingRepository> data) {
         this.data = data;
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepository.java b/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepository.java
index 512329c..af7d0c0 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepository.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/StagingRepository.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.nexus;
 
@@ -21,11 +23,12 @@ package org.apache.sling.cli.impl.nexus;
  *
  */
 public class StagingRepository {
-    
+
     enum Status {
-        open, closed;
+        open,
+        closed;
     }
-    
+
     protected String description;
     protected String repositoryId;
     protected String repositoryURI;
@@ -54,11 +57,11 @@ public class StagingRepository {
     public void setRepositoryURI(String repositoryURI) {
         this.repositoryURI = repositoryURI;
     }
-    
+
     public Status getType() {
         return type;
     }
-    
+
     public void setType(Status type) {
         this.type = type;
     }
diff --git a/src/main/java/org/apache/sling/cli/impl/people/Member.java b/src/main/java/org/apache/sling/cli/impl/people/Member.java
index f25726f..e439037 100644
--- a/src/main/java/org/apache/sling/cli/impl/people/Member.java
+++ b/src/main/java/org/apache/sling/cli/impl/people/Member.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.people;
 
 public class Member {
diff --git a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
index 3962eaa..7d6db1e 100644
--- a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.people;
 
 import java.io.IOException;
@@ -27,6 +27,10 @@ import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
 
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.ibm.icu.text.Transliterator;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -39,11 +43,6 @@ import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.ibm.icu.text.Transliterator;
-
 @Component(service = MembersFinder.class)
 public class MembersFinder {
 
@@ -68,13 +67,16 @@ public class MembersFinder {
                 Set<String> pmcMemberIds;
                 try (CloseableHttpResponse response = client.execute(new HttpGet(PROJECTS_ENDPOINT))) {
                     try (InputStream content = response.getEntity().getContent();
-                         InputStreamReader reader = new InputStreamReader(content)) {
+                            InputStreamReader reader = new InputStreamReader(content)) {
                         if (response.getStatusLine().getStatusCode() != 200) {
                             throw new IOException("Status line : " + response.getStatusLine());
                         }
                         JsonElement jsonElement = parser.parse(reader);
                         JsonObject json = jsonElement.getAsJsonObject();
-                        JsonObject sling = json.get("projects").getAsJsonObject().get("sling").getAsJsonObject();
+                        JsonObject sling = json.get("projects")
+                                .getAsJsonObject()
+                                .get("sling")
+                                .getAsJsonObject();
                         memberIds = new HashSet<>();
                         pmcMemberIds = new HashSet<>();
                         for (JsonElement member : sling.getAsJsonArray("members")) {
@@ -87,7 +89,7 @@ public class MembersFinder {
                 }
                 try (CloseableHttpResponse response = client.execute(new HttpGet(PEOPLE_ENDPOINT))) {
                     try (InputStream content = response.getEntity().getContent();
-                         InputStreamReader reader = new InputStreamReader(content)) {
+                            InputStreamReader reader = new InputStreamReader(content)) {
                         if (response.getStatusLine().getStatusCode() != 200) {
                             throw new IOException("Status line : " + response.getStatusLine());
                         }
@@ -95,10 +97,10 @@ public class MembersFinder {
                         JsonObject json = jsonElement.getAsJsonObject();
                         JsonObject people = json.get("people").getAsJsonObject();
                         for (String id : memberIds) {
-                            String name = people.get(id).getAsJsonObject().get("name").getAsString();
+                            String name =
+                                    people.get(id).getAsJsonObject().get("name").getAsString();
                             membersReplacementSet.add(new Member(id, name, pmcMemberIds.contains(id)));
                         }
-
                     }
                 }
                 members = Collections.unmodifiableSet(membersReplacementSet);
@@ -122,8 +124,12 @@ public class MembersFinder {
         Collator collator = Collator.getInstance(Locale.US);
         collator.setDecomposition(Collator.NO_DECOMPOSITION);
         for (Member member : findMembers()) {
-            if (email.equals(member.getEmail()) || (name != null && collator.compare(TRANSLITERATOR.transliterate(name),
-                    TRANSLITERATOR.transliterate(member.getName())) == 0)) {
+            if (email.equals(member.getEmail())
+                    || (name != null
+                            && collator.compare(
+                                            TRANSLITERATOR.transliterate(name),
+                                            TRANSLITERATOR.transliterate(member.getName()))
+                                    == 0)) {
                 return member;
             }
         }
@@ -133,5 +139,4 @@ public class MembersFinder {
     public Member getCurrentMember() {
         return findById(credentialsService.getAsfCredentials().getUsername());
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/pgp/HashValidator.java b/src/main/java/org/apache/sling/cli/impl/pgp/HashValidator.java
index 5abd2a3..58edc43 100644
--- a/src/main/java/org/apache/sling/cli/impl/pgp/HashValidator.java
+++ b/src/main/java/org/apache/sling/cli/impl/pgp/HashValidator.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.pgp;
 
 import java.io.IOException;
diff --git a/src/main/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidator.java b/src/main/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidator.java
index 4a2c902..3b61032 100644
--- a/src/main/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidator.java
+++ b/src/main/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidator.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.pgp;
 
 import java.io.FileOutputStream;
@@ -72,8 +72,8 @@ public class PGPSignatureValidator {
             PGPSignature pgpSignature = sigList.get(0);
             PGPPublicKey key = keyRingCollection.getPublicKey(pgpSignature.getKeyID());
             if (key == null) {
-                throw new IllegalStateException(String
-                        .format("Signature %s was not generated with any of the known keys.", signature.getFileName()));
+                throw new IllegalStateException(String.format(
+                        "Signature %s was not generated with any of the known keys.", signature.getFileName()));
             }
             pgpSignature.init(new BcPGPContentVerifierBuilderProvider(), key);
             byte[] buff = new byte[1024];
@@ -83,8 +83,8 @@ public class PGPSignatureValidator {
             }
             return new ValidationResult(pgpSignature.verify(), key);
         } catch (PGPException | IOException e) {
-            throw new IllegalStateException(String.format("Unable to verify signature %s.", signature.getFileName()),
-                    e);
+            throw new IllegalStateException(
+                    String.format("Unable to verify signature %s.", signature.getFileName()), e);
         }
     }
 
@@ -104,8 +104,7 @@ public class PGPSignatureValidator {
                     }
                 }
             } catch (IOException e) {
-                throw new IllegalStateException(
-                        "Cannot download Sling key file from " + KEYS_FILE_URL, e);
+                throw new IllegalStateException("Cannot download Sling key file from " + KEYS_FILE_URL, e);
             }
         }
         try (InputStream in = Files.newInputStream(keysFilePath)) {
@@ -114,8 +113,8 @@ public class PGPSignatureValidator {
                 ArmoredInputStream as = (ArmoredInputStream) bouncyIn;
                 List<PGPPublicKeyRing> keyRings = new ArrayList<>();
                 while (!as.isEndOfStream()) {
-                    PGPPublicKeyRingCollection collection = new PGPPublicKeyRingCollection(as,
-                            new JcaKeyFingerprintCalculator());
+                    PGPPublicKeyRingCollection collection =
+                            new PGPPublicKeyRingCollection(as, new JcaKeyFingerprintCalculator());
                     Iterator<PGPPublicKeyRing> readKeyRings = collection.getKeyRings();
                     while (readKeyRings.hasNext()) {
                         PGPPublicKeyRing keyRing = readKeyRings.next();
@@ -125,7 +124,8 @@ public class PGPSignatureValidator {
                 if (!keyRings.isEmpty()) {
                     keyRingCollection = new PGPPublicKeyRingCollection(keyRings);
                 } else {
-                    throw new IllegalStateException(String.format("Sling keys file from %s does not contain any keys.", keysFile));
+                    throw new IllegalStateException(
+                            String.format("Sling keys file from %s does not contain any keys.", keysFile));
                 }
             }
         } catch (IOException | PGPException e) {
diff --git a/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java b/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
index 6d964f5..226e01a 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
@@ -33,36 +35,41 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + CreateJiraVersionCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + CreateJiraVersionCommand.NAME
-           }
-)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + CreateJiraVersionCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + CreateJiraVersionCommand.NAME
+        })
 @CommandLine.Command(
         name = CreateJiraVersionCommand.NAME,
-        description = "Creates a new Jira version, if needed, and transitions any unresolved issues from the version being released to " +
-                "the next one",
-        subcommands = CommandLine.HelpCommand.class
-)
+        description =
+                "Creates a new Jira version, if needed, and transitions any unresolved issues from the version being released to "
+                        + "the next one",
+        subcommands = CommandLine.HelpCommand.class)
 public class CreateJiraVersionCommand implements Command {
 
     static final String GROUP = "release";
     static final String NAME = "create-new-jira-version";
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @Reference
     private RepositoryService repositoryService;
-    
+
     @Reference
     private VersionClient versionClient;
 
-    @CommandLine.Option(names = {"--version-name"}, description = "Jira version name to use", required = false)
+    @CommandLine.Option(
+            names = {"--version-name"},
+            description = "Jira version name to use",
+            required = false)
     private String jiraVersionName;
 
     @CommandLine.Mixin
@@ -78,13 +85,13 @@ public class CreateJiraVersionCommand implements Command {
                 logger.info("Found {}.", version);
                 Version successorVersion = versionClient.findSuccessorVersion(release);
                 boolean createNextRelease = false;
-                if ( successorVersion == null ) {
+                if (successorVersion == null) {
                     Release next = release.next();
                     if (reusableCLIOptions.executionMode == ExecutionMode.DRY_RUN) {
                         logger.info("Version {} would be created.", next.getName());
                     } else if (reusableCLIOptions.executionMode == ExecutionMode.INTERACTIVE) {
-                        InputOption answer = UserInput.yesNo(String.format("Should version %s be created?", next.getName()),
-                                InputOption.YES);
+                        InputOption answer = UserInput.yesNo(
+                                String.format("Should version %s be created?", next.getName()), InputOption.YES);
                         createNextRelease = (answer == InputOption.YES);
                     } else if (reusableCLIOptions.executionMode == ExecutionMode.AUTO) {
                         createNextRelease = true;
@@ -102,21 +109,28 @@ public class CreateJiraVersionCommand implements Command {
                     if (!unresolvedIssues.isEmpty()) {
                         boolean moveIssues = false;
                         if (reusableCLIOptions.executionMode == ExecutionMode.DRY_RUN) {
-                            logger.info("{} unresolved issues would be moved from version {} to version {} :",
-                                    unresolvedIssues.size(), version.getName(), successorVersion.getName());
+                            logger.info(
+                                    "{} unresolved issues would be moved from version {} to version {} :",
+                                    unresolvedIssues.size(),
+                                    version.getName(),
+                                    successorVersion.getName());
                         } else if (reusableCLIOptions.executionMode == ExecutionMode.INTERACTIVE) {
-                            InputOption answer = UserInput.yesNo(String.format("Should the %s unresolved issue(s) from version %s be " +
-                                            "moved " +
-                                    "to version %s?", unresolvedIssues.size(), version.getName(), successorVersion.getName()),
+                            InputOption answer = UserInput.yesNo(
+                                    String.format(
+                                            "Should the %s unresolved issue(s) from version %s be " + "moved "
+                                                    + "to version %s?",
+                                            unresolvedIssues.size(), version.getName(), successorVersion.getName()),
                                     InputOption.YES);
                             moveIssues = (answer == InputOption.YES);
                         } else if (reusableCLIOptions.executionMode == ExecutionMode.AUTO) {
                             moveIssues = true;
                         }
                         if (moveIssues) {
-                            logger.info("Moving the following issues from {} to {}.", version.getName(), successorVersion.getName());
-                            unresolvedIssues
-                                    .forEach(i -> logger.info("- {} : {}", i.getKey(), i.getSummary()));
+                            logger.info(
+                                    "Moving the following issues from {} to {}.",
+                                    version.getName(),
+                                    successorVersion.getName());
+                            unresolvedIssues.forEach(i -> logger.info("- {} : {}", i.getKey(), i.getSummary()));
                             versionClient.moveIssuesToNewVersion(version, successorVersion, unresolvedIssues);
                             logger.info("Done.");
                         }
@@ -131,9 +145,8 @@ public class CreateJiraVersionCommand implements Command {
     }
 
     private Collection<Release> releases() throws IOException {
-        if ( jiraVersionName != null )
-            return Release.fromString(jiraVersionName);
-        
+        if (jiraVersionName != null) return Release.fromString(jiraVersionName);
+
         StagingRepository repo = repositoryService.find(repositoryId);
         return repositoryService.getReleases(repo);
     }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/ListCommand.java b/src/main/java/org/apache/sling/cli/impl/release/ListCommand.java
index ec15592..43cc36a 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/ListCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/ListCommand.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
@@ -24,23 +26,25 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + ListCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + ListCommand.NAME,
-           }
-)
-@CommandLine.Command(name = ListCommand.NAME, description = "Lists all open releases", subcommands = CommandLine.HelpCommand.class)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + ListCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + ListCommand.NAME,
+        })
+@CommandLine.Command(
+        name = ListCommand.NAME,
+        description = "Lists all open releases",
+        subcommands = CommandLine.HelpCommand.class)
 public class ListCommand implements Command {
 
     static final String GROUP = "release";
     static final String NAME = "list";
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
-    
+
     private static String cleanupNewlines(String input) {
         return input.replace('\n', ' ');
     }
@@ -51,7 +55,9 @@ public class ListCommand implements Command {
     @Override
     public Integer call() {
         try {
-            repositoryService.list().forEach( r -> logger.info("{}\t{}", r.getRepositoryId(), cleanupNewlines(r.getDescription())));
+            repositoryService
+                    .list()
+                    .forEach(r -> logger.info("{}\t{}", r.getRepositoryId(), cleanupNewlines(r.getDescription())));
             return CommandLine.ExitCode.OK;
         } catch (IOException e) {
             logger.warn("Failed executing command", e);
diff --git a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
index 70d1cf4..c05a2ff 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
@@ -1,21 +1,25 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
+import javax.mail.internet.InternetAddress;
+
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
@@ -24,8 +28,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import javax.mail.internet.InternetAddress;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.cli.impl.Command;
 import org.apache.sling.cli.impl.DateProvider;
@@ -43,20 +45,18 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + PrepareVoteEmailCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + PrepareVoteEmailCommand.NAME
-           }
-)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + PrepareVoteEmailCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + PrepareVoteEmailCommand.NAME
+        })
 @CommandLine.Command(
         name = PrepareVoteEmailCommand.NAME,
         description = "Prepares an email vote for the releases found in the Nexus staged repository",
-        subcommands = CommandLine.HelpCommand.class
-)
+        subcommands = CommandLine.HelpCommand.class)
 public class PrepareVoteEmailCommand implements Command {
 
     static final String GROUP = "release";
@@ -79,10 +79,16 @@ public class PrepareVoteEmailCommand implements Command {
     @Reference
     private DateProvider dateProvider;
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
-    @CommandLine.Option(names = {"--version-name"}, description = "Jira version name to use", required = false)
+    @CommandLine.Option(
+            names = {"--version-name"},
+            description = "Jira version name to use",
+            required = false)
     private String jiraVersionName;
 
     @CommandLine.Mixin
@@ -97,8 +103,7 @@ public class PrepareVoteEmailCommand implements Command {
         try {
             EMAIL_TEMPLATE = IOUtils.toString(
                     PrepareVoteEmailCommand.class.getClassLoader().getResourceAsStream("templates/release.email"),
-                    StandardCharsets.UTF_8
-            );
+                    StandardCharsets.UTF_8);
         } catch (IOException e) {
             throw new IllegalStateException("Unable to read embedded email template.", e);
         }
@@ -116,27 +121,21 @@ public class PrepareVoteEmailCommand implements Command {
             } else {
                 StagingRepository repo = repositoryService.find(repositoryId);
                 final Collection<Release> releases;
-                if ( jiraVersionName != null )
-                     releases = Release.fromString(jiraVersionName);
-                else 
-                    releases = repositoryService.getReleases(repo);
-                
-                List<Version> versions = releases.stream()
-                        .map(r -> versionClient.find(r))
-                        .collect(Collectors.toList());
-
-                String releaseName = releases.stream()
-                        .map(Release::getFullName)
-                        .collect(Collectors.joining(", "));
+                if (jiraVersionName != null) releases = Release.fromString(jiraVersionName);
+                else releases = repositoryService.getReleases(repo);
+
+                List<Version> versions =
+                        releases.stream().map(r -> versionClient.find(r)).collect(Collectors.toList());
+
+                String releaseName = releases.stream().map(Release::getFullName).collect(Collectors.joining(", "));
 
                 Set<Issue> fixedIssues = new HashSet<>();
                 for (Release release : releases) {
                     fixedIssues.addAll(versionClient.findFixedIssues(release));
                 }
-                int fixedIssuesCount =  fixedIssues.size();
+                int fixedIssuesCount = fixedIssues.size();
                 String issueOrIssues = fixedIssuesCount > 1 ? "issues" : "issue";
-                String releaseOrReleases = versions.size() > 1 ?
-                        "these releases" : "this release";
+                String releaseOrReleases = versions.size() > 1 ? "these releases" : "this release";
 
                 String releaseNotesLinks = versions.stream()
                         .map(v -> RELEASE_NOTES_LINK_TEMPLATE.replace("##VERSION_ID##", String.valueOf(v.getId())))
@@ -144,7 +143,9 @@ public class PrepareVoteEmailCommand implements Command {
 
                 Member currentMember = membersFinder.getCurrentMember();
                 String emailContents = EMAIL_TEMPLATE
-                        .replace("##FROM##", new InternetAddress(currentMember.getEmail(), currentMember.getName()).toString())
+                        .replace(
+                                "##FROM##",
+                                new InternetAddress(currentMember.getEmail(), currentMember.getName()).toString())
                         .replace("##DATE##", dateProvider.getCurrentDateForEmailHeader())
                         .replace("##RELEASE_NAME##", releaseName)
                         .replace("##RELEASE_ID##", String.valueOf(repositoryId))
@@ -155,12 +156,13 @@ public class PrepareVoteEmailCommand implements Command {
                         .replace("##USER_NAME##", currentMember.getName());
                 switch (reusableCLIOptions.executionMode) {
                     case DRY_RUN:
-                        LOGGER.info("The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
+                        LOGGER.info(
+                                "The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
                         LOGGER.info(emailContents);
                         break;
                     case INTERACTIVE:
-                        String question = "Should the following email be sent from your @apache.org address (see the" +
-                                " \"From:\" header)?\n\n" + emailContents;
+                        String question = "Should the following email be sent from your @apache.org address (see the"
+                                + " \"From:\" header)?\n\n" + emailContents;
                         InputOption answer = UserInput.yesNo(question, InputOption.YES);
                         if (InputOption.YES.equals(answer)) {
                             LOGGER.info("Sending email...");
diff --git a/src/main/java/org/apache/sling/cli/impl/release/Release.java b/src/main/java/org/apache/sling/cli/impl/release/Release.java
index 7b7781e..d78a118 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/Release.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/Release.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
@@ -28,20 +30,21 @@ import java.util.regex.Pattern;
 public final class Release {
 
     /*
-        Group 1: Apache Sling and any trailing whitespace (optional)
-        Group 2: Release component
-        Group 3: Release version
-        Group 4: RC status (optional)
-        Group 5: Additional comment, e.g. (Java 11) (optional)
-     */
-    private static final Pattern RELEASE_PATTERN = Pattern.compile("^\\h*(Apache Sling\\h*)?([()a-zA-Z0-9\\-.\\h]+)\\h([0-9\\-.]+)" +
-            "\\h?(RC[0-9.]*)?\\h*(\\([a-zA-Z0-9\\s]+\\))?\\h*$");
-    
+       Group 1: Apache Sling and any trailing whitespace (optional)
+       Group 2: Release component
+       Group 3: Release version
+       Group 4: RC status (optional)
+       Group 5: Additional comment, e.g. (Java 11) (optional)
+    */
+    private static final Pattern RELEASE_PATTERN =
+            Pattern.compile("^\\h*(Apache Sling\\h*)?([()a-zA-Z0-9\\-.\\h]+)\\h([0-9\\-.]+)"
+                    + "\\h?(RC[0-9.]*)?\\h*(\\([a-zA-Z0-9\\s]+\\))?\\h*$");
+
     public static List<Release> fromString(String repositoryDescription) {
 
         List<Release> releases = new ArrayList<>();
-        for (String item  : repositoryDescription.split(",") ) {
-            
+        for (String item : repositoryDescription.split(",")) {
+
             Matcher matcher = RELEASE_PATTERN.matcher(item);
             if (matcher.matches()) {
                 Release rel = new Release();
@@ -53,53 +56,51 @@ public final class Release {
                     fullName.append(matcher.group(1).trim()).append(" ");
                 }
                 fullName.append(rel.name);
-                if ( matcher.group(5) != null ) {
+                if (matcher.group(5) != null) {
                     fullName.append(' ').append(matcher.group(5));
                 }
                 rel.fullName = fullName.toString();
-                
+
                 releases.add(rel);
             }
         }
-        
-        if ( releases.isEmpty() )
+
+        if (releases.isEmpty())
             throw new IllegalArgumentException("No releases found in '" + repositoryDescription + "'");
-        
+
         return releases;
     }
-    
+
     private String fullName;
     private String name;
     private String component;
     private String version;
     private String comment;
 
-    private Release() {
-        
-    }
-    
+    private Release() {}
+
     /**
      * Returns the full name, e.g. <em>Apache Sling Foo 1.0.2</em>
-     * 
+     *
      * @return the full name
      */
     public String getFullName() {
         return fullName;
     }
-    
+
     /**
      * Returns the name, e.g. <em>Foo 1.0.2</em>
-     * 
+     *
      * @return the name
      */
     public String getName() {
         return name;
     }
-    
+
     /**
      * Returns the version, e.g. <em>1.0.2</em>
-     * 
-     * @return the version 
+     *
+     * @return the version
      */
     public String getVersion() {
         return version;
@@ -107,13 +108,13 @@ public final class Release {
 
     /**
      * Returns the component, e.g. <code>Foo</code>
-     * 
+     *
      * @return the component
      */
     public String getComponent() {
         return component;
     }
-    
+
     /**
      * Returns the comment, e.g. <code>(Java 11)</code>
      * @return the comment
@@ -124,31 +125,32 @@ public final class Release {
 
     /**
      * Creates a new Release object that corresponds to the next release name
-     * 
+     *
      * <p>The next object is identical to <code>this</code> object, except the fact that the
      * micro component of the version is increased by two.</P>
-     * 
+     *
      * <p>For instance, the next version of <code>Apache Sling Foo 1.0.2</code> is <code>Apache Sling Foo 1.0.4</code>.</p>
-     * 
+     *
      * @return the next release
      */
     public Release next() {
-        
+
         // assumption is that the release object is well-formed
         int lastSeparator = fullName.lastIndexOf('.'); // Apache Sling Foo 1.0.2 -> 1.0.4
         int increment = 2;
-        if ( lastSeparator == -1 ) {
+        if (lastSeparator == -1) {
             lastSeparator = fullName.lastIndexOf(' '); // Apache Sling Bar 2 -> 3
             increment = 1;
         }
-        
+
         int componentToIncrement = Integer.parseInt(fullName.substring(lastSeparator + 1));
-        
+
         String unchangedPart = fullName.substring(0, lastSeparator + 1);
-        
-        return Release.fromString(unchangedPart + ( componentToIncrement + increment )).get(0);
+
+        return Release.fromString(unchangedPart + (componentToIncrement + increment))
+                .get(0);
     }
-    
+
     @Override
     public int hashCode() {
         return fullName.hashCode();
diff --git a/src/main/java/org/apache/sling/cli/impl/release/ReleaseCLIGroup.java b/src/main/java/org/apache/sling/cli/impl/release/ReleaseCLIGroup.java
index 1700765..3a51acb 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/ReleaseCLIGroup.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/ReleaseCLIGroup.java
@@ -1,33 +1,30 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import org.apache.sling.cli.impl.CLIGroup;
-
 import picocli.CommandLine;
 
-@CommandLine.Command(
-        description = "Performs release-related operations"
-)
+@CommandLine.Command(description = "Performs release-related operations")
 public class ReleaseCLIGroup implements CLIGroup {
 
-    private ReleaseCLIGroup(){}
+    private ReleaseCLIGroup() {}
 
     @CommandLine.Spec
     private CommandLine.Model.CommandSpec commandSpec;
diff --git a/src/main/java/org/apache/sling/cli/impl/release/ReleaseJiraVersionCommand.java b/src/main/java/org/apache/sling/cli/impl/release/ReleaseJiraVersionCommand.java
index ea85184..5aa9a1c 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/ReleaseJiraVersionCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/ReleaseJiraVersionCommand.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import java.util.List;
@@ -33,22 +33,22 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + ReleaseJiraVersionCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + ReleaseJiraVersionCommand.NAME
-           }
-)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + ReleaseJiraVersionCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + ReleaseJiraVersionCommand.NAME
+        })
 @CommandLine.Command(
         name = ReleaseJiraVersionCommand.NAME,
-        description = "The found Jira versions will be marked as released with the current date. All fixed issues will be closed. Before " +
-                "running this command make sure to execute " + CreateJiraVersionCommand.NAME + " in order to move any unresolved issues " +
-                "to the next version.",
-        subcommands = CommandLine.HelpCommand.class
-)
+        description =
+                "The found Jira versions will be marked as released with the current date. All fixed issues will be closed. Before "
+                        + "running this command make sure to execute "
+                        + CreateJiraVersionCommand.NAME + " in order to move any unresolved issues "
+                        + "to the next version.",
+        subcommands = CommandLine.HelpCommand.class)
 public class ReleaseJiraVersionCommand implements Command {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ReleaseJiraVersionCommand.class);
@@ -56,7 +56,10 @@ public class ReleaseJiraVersionCommand implements Command {
     static final String GROUP = "release";
     static final String NAME = "release-jira-version";
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @Reference
@@ -74,18 +77,24 @@ public class ReleaseJiraVersionCommand implements Command {
             StagingRepository repo = repositoryService.find(repositoryId);
             Set<Release> releases = repositoryService.getReleases(repo);
             ExecutionMode executionMode = reusableCLIOptions.executionMode;
-            LOGGER.info("The following Jira versions {} be released:{}", executionMode == ExecutionMode.DRY_RUN ? "would" : "will",
+            LOGGER.info(
+                    "The following Jira versions {} be released:{}",
+                    executionMode == ExecutionMode.DRY_RUN ? "would" : "will",
                     System.lineSeparator());
             for (Release release : releases) {
                 List<Issue> fixedIssues = versionClient.findFixedIssues(release);
                 LOGGER.info("{}:", release.getFullName());
-                fixedIssues.forEach(issue -> LOGGER.info("- {} - {}, Status: {}, Resolution: {}", issue.getKey(), issue.getSummary(),
-                        issue.getStatus(), issue.getResolution()));
+                fixedIssues.forEach(issue -> LOGGER.info(
+                        "- {} - {}, Status: {}, Resolution: {}",
+                        issue.getKey(),
+                        issue.getSummary(),
+                        issue.getStatus(),
+                        issue.getResolution()));
                 LOGGER.info("");
                 boolean shouldRelease = false;
                 if (executionMode == ExecutionMode.INTERACTIVE) {
-                    InputOption answer = UserInput.yesNo(String.format("Should version %s be released?", release.getFullName()),
-                            InputOption.YES);
+                    InputOption answer = UserInput.yesNo(
+                            String.format("Should version %s be released?", release.getFullName()), InputOption.YES);
                     shouldRelease = (answer == InputOption.YES);
                 } else if (executionMode == ExecutionMode.AUTO) {
                     shouldRelease = true;
@@ -94,8 +103,12 @@ public class ReleaseJiraVersionCommand implements Command {
                     versionClient.release(release);
                     LOGGER.info("{} was released:", release.getFullName());
                     fixedIssues = versionClient.findFixedIssues(release);
-                    fixedIssues.forEach(issue -> LOGGER.info("- {} - {}, Status: {}, Resolution: {}", issue.getKey(), issue.getSummary(),
-                            issue.getStatus(), issue.getResolution()));
+                    fixedIssues.forEach(issue -> LOGGER.info(
+                            "- {} - {}, Status: {}, Resolution: {}",
+                            issue.getKey(),
+                            issue.getSummary(),
+                            issue.getStatus(),
+                            issue.getResolution()));
                 }
             }
         } catch (Exception e) {
diff --git a/src/main/java/org/apache/sling/cli/impl/release/ReusableCLIOptions.java b/src/main/java/org/apache/sling/cli/impl/release/ReusableCLIOptions.java
index afa4ef4..94c6938 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/ReusableCLIOptions.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/ReusableCLIOptions.java
@@ -1,25 +1,24 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import org.apache.sling.cli.impl.ExecutionMode;
-
 import picocli.CommandLine;
 
 class ReusableCLIOptions {
@@ -29,6 +28,4 @@ class ReusableCLIOptions {
             defaultValue = "DRY_RUN",
             description = "execution mode: ${COMPLETION-CANDIDATES}; default: ${DEFAULT-VALUE}")
     ExecutionMode executionMode;
-
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
index 6a7120f..3daca17 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
@@ -1,21 +1,25 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
+import javax.mail.internet.InternetAddress;
+
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.text.Collator;
@@ -26,8 +30,6 @@ import java.util.Locale;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import javax.mail.internet.InternetAddress;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.cli.impl.Command;
 import org.apache.sling.cli.impl.DateProvider;
@@ -44,16 +46,18 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class, property = {
-        Command.PROPERTY_NAME_COMMAND_GROUP + "=" + TallyVotesCommand.GROUP,
-        Command.PROPERTY_NAME_COMMAND_NAME + "=" + TallyVotesCommand.NAME
-})
-@CommandLine.Command(name = TallyVotesCommand.NAME,
-                     description = "Counts votes cast for a release and generates the result email",
-                     subcommands = CommandLine.HelpCommand.class)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + TallyVotesCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + TallyVotesCommand.NAME
+        })
+@CommandLine.Command(
+        name = TallyVotesCommand.NAME,
+        description = "Counts votes cast for a release and generates the result email",
+        subcommands = CommandLine.HelpCommand.class)
 public class TallyVotesCommand implements Command {
 
     static final String GROUP = "release";
@@ -76,7 +80,10 @@ public class TallyVotesCommand implements Command {
     @Reference
     private DateProvider dateProvider;
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @CommandLine.Mixin
@@ -88,8 +95,7 @@ public class TallyVotesCommand implements Command {
         try {
             EMAIL_TEMPLATE = IOUtils.toString(
                     TallyVotesCommand.class.getClassLoader().getResourceAsStream("templates/tally-votes.email"),
-                    StandardCharsets.UTF_8
-            );
+                    StandardCharsets.UTF_8);
         } catch (IOException e) {
             throw new IllegalStateException("Unable to read embedded email template.", e);
         }
@@ -110,29 +116,32 @@ public class TallyVotesCommand implements Command {
             if (emailThread.isEmpty()) {
                 LOGGER.error("Could not find a corresponding email voting thread for release \"{}\".", releaseName);
             } else {
-                emailThread.stream().skip(1).filter(this::isPositiveVote).forEachOrdered(
-                        email -> {
-                            String from = email.getFrom().getAddress();
-                            String name = email.getFrom().getPersonal();
-                            Member m = membersFinder.findByNameOrEmail(name, from);
-                            if (m != null) {
-                                if (m.isPMCMember()) {
-                                    bindingVoters.add(m.getName());
-                                } else {
-                                    nonBindingVoters.add(m.getName());
-                                }
-                            } else {
-                                nonBindingVoters.add(name);
-                            }
+                emailThread.stream().skip(1).filter(this::isPositiveVote).forEachOrdered(email -> {
+                    String from = email.getFrom().getAddress();
+                    String name = email.getFrom().getPersonal();
+                    Member m = membersFinder.findByNameOrEmail(name, from);
+                    if (m != null) {
+                        if (m.isPMCMember()) {
+                            bindingVoters.add(m.getName());
+                        } else {
+                            nonBindingVoters.add(m.getName());
                         }
-                );
+                    } else {
+                        nonBindingVoters.add(name);
+                    }
+                });
                 Member currentMember = membersFinder.getCurrentMember();
                 String email = EMAIL_TEMPLATE
-                        .replace("##FROM##", new InternetAddress(currentMember.getEmail(), currentMember.getName()).toUnicodeString())
+                        .replace(
+                                "##FROM##",
+                                new InternetAddress(currentMember.getEmail(), currentMember.getName())
+                                        .toUnicodeString())
                         .replace("##DATE##", dateProvider.getCurrentDateForEmailHeader())
                         .replace("##RELEASE_NAME##", releaseFullName)
                         .replace("##BINDING_VOTERS##", String.join(", ", bindingVoters))
-                        .replace("##USER_NAME##", membersFinder.getCurrentMember().getName());
+                        .replace(
+                                "##USER_NAME##",
+                                membersFinder.getCurrentMember().getName());
                 if (nonBindingVoters.isEmpty()) {
                     email = email.replace("##NON_BINDING_VOTERS##", "none");
                 } else {
@@ -142,12 +151,14 @@ public class TallyVotesCommand implements Command {
                 if (bindingVoters.size() >= 3) {
                     switch (reusableCLIOptions.executionMode) {
                         case DRY_RUN:
-                            LOGGER.info("The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
+                            LOGGER.info(
+                                    "The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
                             LOGGER.info(email);
                             break;
                         case INTERACTIVE:
-                            String question ="Should the following email be sent from your @apache.org address (see the" +
-                                    " \"From:\" header)?\n\n" + email;
+                            String question =
+                                    "Should the following email be sent from your @apache.org address (see the"
+                                            + " \"From:\" header)?\n\n" + email;
                             InputOption answer = UserInput.yesNo(question, InputOption.YES);
                             if (InputOption.YES.equals(answer)) {
                                 LOGGER.info("Sending email...");
@@ -166,13 +177,15 @@ public class TallyVotesCommand implements Command {
                     }
                 } else {
                     LOGGER.info("Release {} does not have at least 3 binding votes.", releaseFullName);
-                    LOGGER.info("Binding votes: {}.", bindingVoters.isEmpty() ? "none" : String.join(", ", bindingVoters));
-                    LOGGER.info("Non-binding votes: {}.", nonBindingVoters.isEmpty() ? "none" : String.join(", ",
-                            bindingVoters));
+                    LOGGER.info(
+                            "Binding votes: {}.", bindingVoters.isEmpty() ? "none" : String.join(", ", bindingVoters));
+                    LOGGER.info(
+                            "Non-binding votes: {}.",
+                            nonBindingVoters.isEmpty() ? "none" : String.join(", ", bindingVoters));
                     return CommandLine.ExitCode.USAGE;
                 }
             }
-            
+
         } catch (IOException e) {
             LOGGER.warn("Command execution failed", e);
             return CommandLine.ExitCode.SOFTWARE;
@@ -188,9 +201,8 @@ public class TallyVotesCommand implements Command {
     private String cleanup(String subject) {
         String[] lines = subject.split("\\n");
         return Arrays.stream(lines)
-            .filter( l -> !l.isEmpty() )
-            .filter( l -> !l.startsWith(">"))
-            .collect(Collectors.joining("\n"));
+                .filter(l -> !l.isEmpty())
+                .filter(l -> !l.startsWith(">"))
+                .collect(Collectors.joining("\n"));
     }
-
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/UpdateLocalSiteCommand.java b/src/main/java/org/apache/sling/cli/impl/release/UpdateLocalSiteCommand.java
index dbaf6e6..b9a3e6e 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/UpdateLocalSiteCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/UpdateLocalSiteCommand.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
@@ -35,17 +37,18 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + UpdateLocalSiteCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + UpdateLocalSiteCommand.NAME
-           }
-)
-@CommandLine.Command(name = UpdateLocalSiteCommand.NAME, description = "Updates the Sling website with the new release information, " +
-        "based on a local checkout", subcommands = CommandLine.HelpCommand.class)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + UpdateLocalSiteCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + UpdateLocalSiteCommand.NAME
+        })
+@CommandLine.Command(
+        name = UpdateLocalSiteCommand.NAME,
+        description = "Updates the Sling website with the new release information, " + "based on a local checkout",
+        subcommands = CommandLine.HelpCommand.class)
 public class UpdateLocalSiteCommand implements Command {
 
     static final String GROUP = "release";
@@ -55,56 +58,54 @@ public class UpdateLocalSiteCommand implements Command {
 
     @Reference
     private RepositoryService repositoryService;
-    
+
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @Override
     public Integer call() {
         try {
             ensureRepo();
-            try ( Git git = Git.open(new File(GIT_CHECKOUT)) ) {
-                
+            try (Git git = Git.open(new File(GIT_CHECKOUT))) {
+
                 StagingRepository repository = repositoryService.find(repositoryId);
                 Set<Release> releases = repositoryService.getReleases(repository);
-                
+
                 JBakeContentUpdater updater = new JBakeContentUpdater();
-        
+
                 Path templatePath = Paths.get(GIT_CHECKOUT, "src", "main", "jbake", "templates", "downloads.tpl");
                 Path releasesPath = Paths.get(GIT_CHECKOUT, "src", "main", "jbake", "content", "releases.md");
                 LocalDateTime now = LocalDateTime.now();
-                for ( Release release : releases ) {
+                for (Release release : releases) {
                     updater.updateDownloads(templatePath, release.getComponent(), release.getVersion());
                     updater.updateReleases(releasesPath, release.getComponent(), release.getVersion(), now);
                 }
-        
-                git.diff()
-                    .setOutputStream(System.out)
-                    .call();
+
+                git.diff().setOutputStream(System.out).call();
             }
         } catch (GitAPIException | IOException e) {
             logger.warn("Failed executing command", e);
             return CommandLine.ExitCode.SOFTWARE;
         }
         return CommandLine.ExitCode.OK;
-            
     }
 
     private void ensureRepo() throws GitAPIException, IOException {
-        
-        if ( !Paths.get(GIT_CHECKOUT).toFile().exists() ) {
+
+        if (!Paths.get(GIT_CHECKOUT).toFile().exists()) {
             Git.cloneRepository()
-            .setURI("https://github.com/apache/sling-site.git")
-            .setProgressMonitor(new TextProgressMonitor())
-            .setDirectory(new File(GIT_CHECKOUT))
-            .call();
-        } else {
-            try ( Git git = Git.open(new File(GIT_CHECKOUT)) )  {
-                git.reset()
-                    .setMode(ResetType.HARD)
+                    .setURI("https://github.com/apache/sling-site.git")
+                    .setProgressMonitor(new TextProgressMonitor())
+                    .setDirectory(new File(GIT_CHECKOUT))
                     .call();
+        } else {
+            try (Git git = Git.open(new File(GIT_CHECKOUT))) {
+                git.reset().setMode(ResetType.HARD).call();
             }
         }
     }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/UpdateReporterCommand.java b/src/main/java/org/apache/sling/cli/impl/release/UpdateReporterCommand.java
index 0995b93..983618c 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/UpdateReporterCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/UpdateReporterCommand.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import java.io.IOException;
@@ -42,20 +42,18 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class,
-           property = {
-                   Command.PROPERTY_NAME_COMMAND_GROUP + "=" + UpdateReporterCommand.GROUP,
-                   Command.PROPERTY_NAME_COMMAND_NAME + "=" + UpdateReporterCommand.NAME,
-           }
-)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + UpdateReporterCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + UpdateReporterCommand.NAME,
+        })
 @CommandLine.Command(
         name = UpdateReporterCommand.NAME,
         description = "Updates the Apache Reporter System with the new release information",
-        subcommands = CommandLine.HelpCommand.class
-)
+        subcommands = CommandLine.HelpCommand.class)
 public class UpdateReporterCommand implements Command {
 
     static final String GROUP = "release";
@@ -69,7 +67,10 @@ public class UpdateReporterCommand implements Command {
     @Reference
     private HttpClientFactory httpClientFactory;
 
-    @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @CommandLine.Mixin
@@ -87,9 +88,13 @@ public class UpdateReporterCommand implements Command {
                     releases.forEach(release -> LOGGER.info("  - {}", release.getFullName()));
                     break;
                 case INTERACTIVE:
-                    StringBuilder question = new StringBuilder(String.format("Should the following %s be added to the Apache Reporter " +
-                            "System?", releaseReleases)).append("\n");
-                    releases.forEach(release -> question.append("  - ").append(release.getFullName()).append("\n"));
+                    StringBuilder question = new StringBuilder(String.format(
+                                    "Should the following %s be added to the Apache Reporter " + "System?",
+                                    releaseReleases))
+                            .append("\n");
+                    releases.forEach(release -> question.append("  - ")
+                            .append(release.getFullName())
+                            .append("\n"));
                     InputOption answer = UserInput.yesNo(question.toString(), InputOption.YES);
                     if (InputOption.YES.equals(answer)) {
                         LOGGER.info("Updating the Apache Reporter System...");
@@ -111,7 +116,6 @@ public class UpdateReporterCommand implements Command {
             return CommandLine.ExitCode.SOFTWARE;
         }
         return CommandLine.ExitCode.OK;
-
     }
 
     private void updateReporter(Set<Release> releases) throws IOException {
@@ -128,8 +132,10 @@ public class UpdateReporterCommand implements Command {
                 post.setEntity(new UrlEncodedFormEntity(parameters, StandardCharsets.UTF_8));
                 try (CloseableHttpResponse response = client.execute(post)) {
                     if (response.getStatusLine().getStatusCode() != 200) {
-                        throw new IOException(String.format("The Apache Reporter System update failed for release %s. Got response code " +
-                                "%s instead of 200.", release.getFullName(), response.getStatusLine().getStatusCode()));
+                        throw new IOException(String.format(
+                                "The Apache Reporter System update failed for release %s. Got response code "
+                                        + "%s instead of 200.",
+                                release.getFullName(), response.getStatusLine().getStatusCode()));
                     }
                 }
             }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java b/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
index a1c3397..d8c4b59 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import java.io.IOException;
@@ -36,13 +36,18 @@ import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
-@Component(service = Command.class, property = {
-        Command.PROPERTY_NAME_COMMAND_GROUP + "=" + VerifyReleasesCommand.GROUP,
-        Command.PROPERTY_NAME_COMMAND_NAME + "=" + VerifyReleasesCommand.NAME })
-@CommandLine.Command(name = VerifyReleasesCommand.NAME, description = "Downloads the staging repository and verifies the artifacts' signatures and hashes.", subcommands = CommandLine.HelpCommand.class)
+@Component(
+        service = Command.class,
+        property = {
+            Command.PROPERTY_NAME_COMMAND_GROUP + "=" + VerifyReleasesCommand.GROUP,
+            Command.PROPERTY_NAME_COMMAND_NAME + "=" + VerifyReleasesCommand.NAME
+        })
+@CommandLine.Command(
+        name = VerifyReleasesCommand.NAME,
+        description = "Downloads the staging repository and verifies the artifacts' signatures and hashes.",
+        subcommands = CommandLine.HelpCommand.class)
 public class VerifyReleasesCommand implements Command {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(VerifyReleasesCommand.class);
@@ -62,7 +67,10 @@ public class VerifyReleasesCommand implements Command {
     @Reference
     private HashValidator hashValidator;
 
-    @CommandLine.Option(names = { "-r", "--repository" }, description = "Nexus repository id", required = true)
+    @CommandLine.Option(
+            names = {"-r", "--repository"},
+            description = "Nexus repository id",
+            required = true)
     private Integer repositoryId;
 
     @CommandLine.Mixin
@@ -84,45 +92,61 @@ public class VerifyReleasesCommand implements Command {
                 }
                 Path artifactFilePath = repositoryRootPath.resolve(artifact.getRepositoryRelativePath());
                 Path artifactSignaturePath = repositoryRootPath.resolve(artifact.getRepositoryRelativeSignaturePath());
-                PGPSignatureValidator.ValidationResult validationResult = pgpSignatureValidator.verify(artifactFilePath,
-                        artifactSignaturePath);
+                PGPSignatureValidator.ValidationResult validationResult =
+                        pgpSignatureValidator.verify(artifactFilePath, artifactSignaturePath);
                 checksRun++;
                 if (!validationResult.isValid()) {
                     failedChecks++;
                 }
-                HashValidator.ValidationResult sha1validationResult = hashValidator.validate(artifactFilePath,
-                        repositoryRootPath.resolve(artifact.getRepositoryRelativeSha1SumPath()), "SHA-1");
+                HashValidator.ValidationResult sha1validationResult = hashValidator.validate(
+                        artifactFilePath,
+                        repositoryRootPath.resolve(artifact.getRepositoryRelativeSha1SumPath()),
+                        "SHA-1");
                 checksRun++;
                 if (!sha1validationResult.isValid()) {
                     failedChecks++;
                 }
-                HashValidator.ValidationResult md5validationResult = hashValidator.validate(artifactFilePath,
-                        repositoryRootPath.resolve(artifact.getRepositoryRelativeMd5SumPath()), "MD5");
+                HashValidator.ValidationResult md5validationResult = hashValidator.validate(
+                        artifactFilePath,
+                        repositoryRootPath.resolve(artifact.getRepositoryRelativeMd5SumPath()),
+                        "MD5");
                 checksRun++;
                 if (!md5validationResult.isValid()) {
                     failedChecks++;
                 }
                 LOGGER.info("\n{}", artifactFilePath.getFileName().toString());
                 PGPPublicKey key = validationResult.getKey();
-                LOGGER.info("GPG: {}", validationResult.isValid()
-                        ? String.format("signed by %s with key (id=0x%X; " + "fingerprint=%s)", getKeyUserId(key),
-                                key.getKeyID(), Hex.toHexString(key.getFingerprint()).toUpperCase(Locale.US))
-                        : "INVALID");
-                LOGGER.info("SHA-1: {}",
+                LOGGER.info(
+                        "GPG: {}",
+                        validationResult.isValid()
+                                ? String.format(
+                                        "signed by %s with key (id=0x%X; " + "fingerprint=%s)",
+                                        getKeyUserId(key),
+                                        key.getKeyID(),
+                                        Hex.toHexString(key.getFingerprint()).toUpperCase(Locale.US))
+                                : "INVALID");
+                LOGGER.info(
+                        "SHA-1: {}",
                         sha1validationResult.isValid()
                                 ? String.format("VALID (%s)", sha1validationResult.getActualHash())
-                                : String.format("INVALID (expected %s, got %s)", sha1validationResult.getExpectedHash(),
-                                        sha1validationResult.getActualHash()));
-                LOGGER.info("MD-5: {}",
-                        md5validationResult.isValid() ? String.format("VALID (%s)", md5validationResult.getActualHash())
-                                : String.format("INVALID (expected %s, got %s)", md5validationResult.getExpectedHash(),
-                                        md5validationResult.getActualHash()));
+                                : String.format(
+                                        "INVALID (expected %s, got %s)",
+                                        sha1validationResult.getExpectedHash(), sha1validationResult.getActualHash()));
+                LOGGER.info(
+                        "MD-5: {}",
+                        md5validationResult.isValid()
+                                ? String.format("VALID (%s)", md5validationResult.getActualHash())
+                                : String.format(
+                                        "INVALID (expected %s, got %s)",
+                                        md5validationResult.getExpectedHash(), md5validationResult.getActualHash()));
             }
             if (pom != null && pomPath != null) {
                 if (ciStatusValidator.shouldCheck(pom, pomPath)) {
                     CIStatusValidator.ValidationResult ciValidationResult = ciStatusValidator.isValid(pomPath);
-                    LOGGER.info("\nCI Status: {}",
-                            ciValidationResult.isValid() ? String.format("VALID: %n%s", ciValidationResult.getMessage())
+                    LOGGER.info(
+                            "\nCI Status: {}",
+                            ciValidationResult.isValid()
+                                    ? String.format("VALID: %n%s", ciValidationResult.getMessage())
                                     : String.format("INVALID: %n%s", ciValidationResult.getMessage()));
                     checksRun++;
                     if (!ciValidationResult.isValid()) {
@@ -136,7 +160,7 @@ public class VerifyReleasesCommand implements Command {
             return CommandLine.ExitCode.SOFTWARE;
         }
         LOGGER.info("\n\nRelease Summary: {}\n\n");
-        if(failedChecks == 0){
+        if (failedChecks == 0) {
             LOGGER.info(String.format("VALID (%d checks executed)", checksRun));
             return CommandLine.ExitCode.OK;
         } else {
@@ -149,5 +173,4 @@ public class VerifyReleasesCommand implements Command {
         Iterator<String> iterator = key.getUserIDs();
         return iterator.hasNext() ? iterator.next() : "unknown";
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/CommandProcessorTest.java b/src/test/java/org/apache/sling/cli/impl/CommandProcessorTest.java
index fa90549..bf31c16 100644
--- a/src/test/java/org/apache/sling/cli/impl/CommandProcessorTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/CommandProcessorTest.java
@@ -1,47 +1,51 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-
 import java.util.Map;
 
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Rule;
 import org.junit.Test;
-
 import picocli.CommandLine;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
 public class CommandProcessorTest {
 
-    @CommandLine.Command(
-            name = MockCommand.COMMAND_NAME,
-            description = "Mock Command"
-    )
+    @CommandLine.Command(name = MockCommand.COMMAND_NAME, description = "Mock Command")
     public class MockCommand implements Command {
 
         static final String COMMAND_GROUP = "release"; // match existing command group to simplify invocation
         static final String COMMAND_NAME = "mock";
 
-        @CommandLine.Option(names = {"-r", "--repository"}, description = "Nexus repository id", required = true)
+        @CommandLine.Option(
+                names = {"-r", "--repository"},
+                description = "Nexus repository id",
+                required = true)
         private Integer repositoryId;
 
-        @CommandLine.Option(names = {"-d", "--description"}, description = "Long form description", required = true)
+        @CommandLine.Option(
+                names = {"-d", "--description"},
+                description = "Long form description",
+                required = true)
         private String description;
 
         private int invocationCount;
@@ -67,19 +71,27 @@ public class CommandProcessorTest {
         CommandProcessor commandProcessor = new CommandProcessor() {
             @Override
             protected String getArgLine() {
-                return "release\n"
-                        + "mock\n"
-                        + "-r\n"
-                        + "24\n"
-                        + "--description=Test 'description'";
+                return "release\n" + "mock\n" + "-r\n" + "24\n" + "--description=Test 'description'";
             }
+
             @Override
-            protected void stopFramework() { /* ignored  */}
+            protected void stopFramework() {
+                /* ignored  */
+            }
+
             @Override
-            protected void terminateExecution(int commandExitCode) { /* ignored  */ }
+            protected void terminateExecution(int commandExitCode) {
+                /* ignored  */
+            }
         };
         MockCommand cmd = new MockCommand();
-        commandProcessor.bindCommand(cmd, Map.of(Command.PROPERTY_NAME_COMMAND_GROUP, MockCommand.COMMAND_GROUP, Command.PROPERTY_NAME_COMMAND_NAME, MockCommand.COMMAND_NAME));
+        commandProcessor.bindCommand(
+                cmd,
+                Map.of(
+                        Command.PROPERTY_NAME_COMMAND_GROUP,
+                        MockCommand.COMMAND_GROUP,
+                        Command.PROPERTY_NAME_COMMAND_NAME,
+                        MockCommand.COMMAND_NAME));
 
         commandProcessor.runCommand();
 
diff --git a/src/test/java/org/apache/sling/cli/impl/CredentialsServiceTest.java b/src/test/java/org/apache/sling/cli/impl/CredentialsServiceTest.java
index 6d241bf..7c53208 100644
--- a/src/test/java/org/apache/sling/cli/impl/CredentialsServiceTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/CredentialsServiceTest.java
@@ -1,51 +1,54 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl;
 
+import org.junit.Test;
+
 import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertThat;
 
-import org.junit.Test;
-
 public class CredentialsServiceTest {
 
-    private static final String[] VALID_PROPS = new String[] { "asf.username", "asf.password", "jira.username", "jira.password" };
+    private static final String[] VALID_PROPS =
+            new String[] {"asf.username", "asf.password", "jira.username", "jira.password"};
 
     @Test(expected = IllegalStateException.class)
     public void noCredentialSourcesFound() {
         new CredentialsService().activate();
     }
-    
+
     @Test
     public void credentialsFromSystemProps() {
-        for ( String prop : VALID_PROPS ) {
+        for (String prop : VALID_PROPS) {
             System.setProperty(prop, prop + ".val");
         }
-        
+
         try {
-            
+
             CredentialsService creds = new CredentialsService();
             creds.activate();
-            
+
             assertThat(creds.getAsfCredentials().getUsername(), equalTo("asf.username.val"));
             assertThat(creds.getAsfCredentials().getPassword(), equalTo("asf.password.val"));
-            
+
         } finally {
-            for ( String prop : VALID_PROPS ) {
+            for (String prop : VALID_PROPS) {
                 System.clearProperty(prop);
             }
         }
diff --git a/src/test/java/org/apache/sling/cli/impl/ci/CIStatusValidatorTest.java b/src/test/java/org/apache/sling/cli/impl/ci/CIStatusValidatorTest.java
index 6c5e4d5..ae5ce0a 100644
--- a/src/test/java/org/apache/sling/cli/impl/ci/CIStatusValidatorTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/ci/CIStatusValidatorTest.java
@@ -1,29 +1,23 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.ci;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.nio.file.Path;
@@ -46,12 +40,20 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 public class CIStatusValidatorTest {
 
     private static final StagingRepository REPOSITORY = mock(StagingRepository.class);
     private static Artifact JAR = new Artifact(REPOSITORY, "org.apache.sling", "sample-artifact", "1.0", "", "jar");
-    private static Artifact NON_REPO_POM_ARTIFACT = new Artifact(REPOSITORY, "org.apache.sling", "no-repo-pom", "1.0",
-            "", "pom");
+    private static Artifact NON_REPO_POM_ARTIFACT =
+            new Artifact(REPOSITORY, "org.apache.sling", "no-repo-pom", "1.0", "", "pom");
     private static Artifact POM_ARTIFACT = new Artifact(REPOSITORY, "org.apache.sling", "repo-pom", "1.0", "", "pom");
     private static final Map<String, String> SYSTEM_PROPS = new HashMap<>();
 
@@ -82,8 +84,9 @@ public class CIStatusValidatorTest {
             CloseableHttpResponse response = mock(CloseableHttpResponse.class);
             if (urlResourceMap.containsKey(get.getURI().toString())) {
                 HttpEntity entity = mock(HttpEntity.class);
-                when(entity.getContent()).thenReturn(
-                        CIStatusValidatorTest.class.getResourceAsStream(urlResourceMap.get(get.getURI().toString())));
+                when(entity.getContent())
+                        .thenReturn(CIStatusValidatorTest.class.getResourceAsStream(
+                                urlResourceMap.get(get.getURI().toString())));
                 when(response.getEntity()).thenReturn(entity);
             } else {
                 throw new IOException("Failed to call URL: " + get.getURI());
@@ -92,11 +95,12 @@ public class CIStatusValidatorTest {
         });
         when(clientFactory.newClient()).thenReturn(httpClient);
 
-        urlResourceMap.put("https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.0/status",
-                "/ci/failure.json");
-        urlResourceMap.put("https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.1/status",
-                "/ci/success.json");
-        urlResourceMap.put("https://api.github.com/repos/apache/sling-parent/commits/sling-parent-reactor-47/status",
+        urlResourceMap.put(
+                "https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.0/status", "/ci/failure.json");
+        urlResourceMap.put(
+                "https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.1/status", "/ci/success.json");
+        urlResourceMap.put(
+                "https://api.github.com/repos/apache/sling-parent/commits/sling-parent-reactor-47/status",
                 "/ci/tag-status.json");
         urlResourceMap.put(
                 "https://api.github.com/repos/apache/sling-parent/commits/4d051750e93d473d9918c8498233cd42f0f991e6",
@@ -123,15 +127,15 @@ public class CIStatusValidatorTest {
 
     @Test
     public void shouldGetParentCommitForTag() throws URISyntaxException {
-        ValidationResult valid = validator
-                .isValid(getResourcePath("/ci/tag-test.pom"));
+        ValidationResult valid = validator.isValid(getResourcePath("/ci/tag-test.pom"));
         assertTrue(valid.isValid());
         assertNotNull(valid.getMessage());
     }
 
     @Test
     public void getCIStatusEndpoint() throws URISyntaxException {
-        assertEquals("https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.0/status",
+        assertEquals(
+                "https://api.github.com/repos/apache/sling-repo-pom/commits/repo-pom-1.0/status",
                 validator.getCIStatusEndpoint(getResourcePath("/ci/repo-1.0.pom")));
     }
 
diff --git a/src/test/java/org/apache/sling/cli/impl/http/HttpClientFactoryTest.java b/src/test/java/org/apache/sling/cli/impl/http/HttpClientFactoryTest.java
index d327203..d7a1e90 100644
--- a/src/test/java/org/apache/sling/cli/impl/http/HttpClientFactoryTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/http/HttpClientFactoryTest.java
@@ -1,27 +1,29 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.http;
 
 import java.net.InetSocketAddress;
 import java.util.HashMap;
 import java.util.Map;
 
+import com.sun.net.httpserver.HttpContext;
+import com.sun.net.httpserver.HttpServer;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.sling.cli.impl.CredentialsService;
@@ -32,9 +34,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.sun.net.httpserver.HttpContext;
-import com.sun.net.httpserver.HttpServer;
-
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -47,6 +46,7 @@ public class HttpClientFactoryTest {
         SYSTEM_PROPS.put("asf.username", "asf-user");
         SYSTEM_PROPS.put("asf.password", "asf-password");
     }
+
     @Rule
     public OsgiContext osgiContext = new OsgiContext();
 
@@ -73,7 +73,8 @@ public class HttpClientFactoryTest {
             throw new IllegalStateException("Unable to retrieve an HttpClientFactory.");
         }
         CloseableHttpClient client = factory.newClient();
-        HttpGet httpGet = new HttpGet("http://" + server.getAddress().getHostString() + ":" + server.getAddress().getPort());
+        HttpGet httpGet = new HttpGet("http://" + server.getAddress().getHostString() + ":"
+                + server.getAddress().getPort());
         Throwable t = null;
         try {
             client.execute(httpGet);
diff --git a/src/test/java/org/apache/sling/cli/impl/http/HttpExchangeHandler.java b/src/test/java/org/apache/sling/cli/impl/http/HttpExchangeHandler.java
index 53bcc93..238ee92 100644
--- a/src/test/java/org/apache/sling/cli/impl/http/HttpExchangeHandler.java
+++ b/src/test/java/org/apache/sling/cli/impl/http/HttpExchangeHandler.java
@@ -1,30 +1,29 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.http;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import org.apache.commons.io.IOUtils;
-
 import com.sun.net.httpserver.HttpExchange;
+import org.apache.commons.io.IOUtils;
 
 public interface HttpExchangeHandler {
 
@@ -43,5 +42,4 @@ public interface HttpExchangeHandler {
     }
 
     boolean tryHandle(HttpExchange ex) throws IOException;
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdaterTest.java b/src/test/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdaterTest.java
index 27aa1fb..d0eacd8 100644
--- a/src/test/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdaterTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdaterTest.java
@@ -1,27 +1,23 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jbake;
 
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.contains;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
@@ -46,37 +42,47 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
 public class JBakeContentUpdaterTest {
 
     @Rule
     public TemporaryFolder tmp = new TemporaryFolder();
-    
+
     private JBakeContentUpdater updater;
-    
+
     @Before
     public void setUp() throws IOException {
-        
+
         updater = new JBakeContentUpdater();
         // copy the file away so we don't modify what is in source control
-        Files.copy(getClass().getResourceAsStream("/downloads.tpl"), Paths.get(new File(tmp.getRoot(), "downloads.tpl").toURI()));
-        Files.copy(getClass().getResourceAsStream("/releases.md"), Paths.get(new File(tmp.getRoot(), "releases.md").toURI()));
+        Files.copy(
+                getClass().getResourceAsStream("/downloads.tpl"),
+                Paths.get(new File(tmp.getRoot(), "downloads.tpl").toURI()));
+        Files.copy(
+                getClass().getResourceAsStream("/releases.md"),
+                Paths.get(new File(tmp.getRoot(), "releases.md").toURI()));
     }
-    
+
     @Test
     public void updateDownloadsTemplate_newReleaseOfExistingModule() throws IOException {
-        
+
         updateDownloadsTemplate0("API", "2.20.2");
     }
 
     private void updateDownloadsTemplate0(String newReleaseName, String newReleaseVersion) throws IOException {
         Path templatePath = Paths.get(new File(tmp.getRoot(), "downloads.tpl").toURI());
-        
+
         int changeCount = updater.updateDownloads(templatePath, newReleaseName, newReleaseVersion);
         assertThat("Unexpected count of changes", changeCount, equalTo(1));
 
         Optional<String> apiLineHolder = Files.readAllLines(templatePath, StandardCharsets.UTF_8).stream()
-            .filter( l -> l.trim().startsWith("\"" + newReleaseName + "|"))
-            .findFirst();
+                .filter(l -> l.trim().startsWith("\"" + newReleaseName + "|"))
+                .findFirst();
         assertTrue(apiLineHolder.isPresent());
         String apiLine = apiLineHolder.get();
         assertThat("Did not find modified version in the release line", apiLine, containsString(newReleaseVersion));
@@ -84,7 +90,7 @@ public class JBakeContentUpdaterTest {
 
     @Test
     public void updateDownloadsTemplate_newReleaseOfExistingMavenPlugin() throws IOException {
-        
+
         updateDownloadsTemplate0("Slingstart Maven Plugin", "1.9.0");
     }
 
@@ -93,52 +99,49 @@ public class JBakeContentUpdaterTest {
 
         updateDownloadsTemplate0("Sling IDE Tooling for Eclipse", "1.4.0");
     }
-    
+
     @Test
     public void updateReleases_releaseInExistingMonth() throws IOException, GitAPIException {
-        updateReleases0(LocalDateTime.of(2019, 2, 27, 22, 0),
-            Arrays.asList( 
-                " " ,  
-                " ## February 2019", 
-                " " ,
-                "+* API 2.20.2 (27th)",
-                " * DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)",  
-                " * Scripting JSP Tag Library 2.4.0, Scripting JSP Tag Library (Compat) 1.0.0 (18th)",
-                " * Pipes 3.1.0 (15th)"
-            )
-        );
-        
+        updateReleases0(
+                LocalDateTime.of(2019, 2, 27, 22, 0),
+                Arrays.asList(
+                        " ",
+                        " ## February 2019",
+                        " ",
+                        "+* API 2.20.2 (27th)",
+                        " * DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)",
+                        " * Scripting JSP Tag Library 2.4.0, Scripting JSP Tag Library (Compat) 1.0.0 (18th)",
+                        " * Pipes 3.1.0 (15th)"));
     }
 
-    private void updateReleases0(LocalDateTime releaseDate, List<String> expectedLines, String... releaseNameAndInfo) throws IOException, GitAPIException {
-        
-        if ( releaseNameAndInfo.length > 2 )
+    private void updateReleases0(LocalDateTime releaseDate, List<String> expectedLines, String... releaseNameAndInfo)
+            throws IOException, GitAPIException {
+
+        if (releaseNameAndInfo.length > 2)
             throw new IllegalArgumentException("Unexpected releaseNameAndInfo: " + Arrays.toString(releaseNameAndInfo));
-        
+
         String releaseName = releaseNameAndInfo.length > 0 ? releaseNameAndInfo[0] : "API";
         String releaseVersion = releaseNameAndInfo.length > 1 ? releaseNameAndInfo[1] : "2.20.2";
-        
+
         ByteArrayOutputStream out = new ByteArrayOutputStream();
-        
-        try ( Git git = Git.init().setDirectory(tmp.getRoot()).call() ) {
+
+        try (Git git = Git.init().setDirectory(tmp.getRoot()).call()) {
             git.add()
-                .addFilepattern("downloads.tpl")
-                .addFilepattern("releases.md")
-                .call();
-            
-            git.commit()
-                .setMessage("Initial commit")
-                .call();
-            
+                    .addFilepattern("downloads.tpl")
+                    .addFilepattern("releases.md")
+                    .call();
+
+            git.commit().setMessage("Initial commit").call();
+
             Path releasesPath = Paths.get(new File(tmp.getRoot(), "releases.md").toURI());
             updater.updateReleases(releasesPath, releaseName, releaseVersion, releaseDate);
-            
+
             List<DiffEntry> changes = git.diff().setOutputStream(out).call();
-            
+
             // ensure that the diff we're getting only refers to the releases file
             // alternatively, when no changes are expected validate that
-            
-            if ( expectedLines.isEmpty() ) {
+
+            if (expectedLines.isEmpty()) {
                 assertThat("changes.size", changes.size(), equalTo(0));
                 return;
             }
@@ -146,54 +149,52 @@ public class JBakeContentUpdaterTest {
             assertThat("changes.size", changes.size(), equalTo(1));
             assertThat("changes[0].type", changes.get(0).getChangeType(), equalTo(ChangeType.MODIFY));
             assertThat("changes[0].path", changes.get(0).getPath(Side.NEW), equalTo("releases.md"));
-            
+
             // now hack away on it safely
             List<String> ignoredPrefixes = Arrays.asList("diff", "index", "---", "+++", "@@");
-            List<String> diffLines = Arrays.stream(new String(out.toByteArray(), StandardCharsets.UTF_8)
-                .split("\\n"))
-                .filter( l -> ignoredPrefixes.stream().noneMatch(l::startsWith))
-                .collect(Collectors.toList());
-            
+            List<String> diffLines = Arrays.stream(new String(out.toByteArray(), StandardCharsets.UTF_8).split("\\n"))
+                    .filter(l -> ignoredPrefixes.stream().noneMatch(l::startsWith))
+                    .collect(Collectors.toList());
+
             assertThat(diffLines, contains(expectedLines.toArray(new String[0])));
         }
     }
 
     @Test
     public void updateReleases_releaseAlreadyExists() throws IOException, GitAPIException {
-        updateReleases0(LocalDateTime.of(2019, 2, 18, 22, 0), Collections.emptyList(), "Scripting JSP Tag Library", "2.4.0");
+        updateReleases0(
+                LocalDateTime.of(2019, 2, 18, 22, 0), Collections.emptyList(), "Scripting JSP Tag Library", "2.4.0");
     }
-    
+
     @Test
     public void updateReleases_releaseInNewMonth() throws IOException, GitAPIException {
-        updateReleases0(LocalDateTime.of(2019, 3, 15, 22, 0),
-            Arrays.asList( 
-               " ~~~~~~",
-               " This is a list of all our releases, available from our [downloads](/downloads.cgi) page.",
-               " ",
-               "+## March 2019",
-               "+",
-               "+* API 2.20.2 (15th)",
-               "+",
-               " ## February 2019",
-               " ",
-               " * DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)"
-            )
-        );
+        updateReleases0(
+                LocalDateTime.of(2019, 3, 15, 22, 0),
+                Arrays.asList(
+                        " ~~~~~~",
+                        " This is a list of all our releases, available from our [downloads](/downloads.cgi) page.",
+                        " ",
+                        "+## March 2019",
+                        "+",
+                        "+* API 2.20.2 (15th)",
+                        "+",
+                        " ## February 2019",
+                        " ",
+                        " * DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)"));
     }
 
     @Test
     public void updateReleases_releaseExistingMonthAndDay() throws IOException, GitAPIException {
-        updateReleases0(LocalDateTime.of(2019, 2, 26, 22, 0),
-            Arrays.asList(
-                " ", 
-                " ## February 2019", 
-                " ", 
-                "-* DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)",
-                "+* DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18, API 2.20.2 (26th)", 
-                " * Scripting JSP Tag Library 2.4.0, Scripting JSP Tag Library (Compat) 1.0.0 (18th)", 
-                " * Pipes 3.1.0 (15th)", 
-                " * Testing OSGi Mock 2.4.6 (14th)"
-            )
-        );
+        updateReleases0(
+                LocalDateTime.of(2019, 2, 26, 22, 0),
+                Arrays.asList(
+                        " ",
+                        " ## February 2019",
+                        " ",
+                        "-* DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18 (26th)",
+                        "+* DataSource Provider 1.0.4, Resource Collection API 1.0.2, JCR ResourceResolver 3.0.18, API 2.20.2 (26th)",
+                        " * Scripting JSP Tag Library 2.4.0, Scripting JSP Tag Library (Compat) 1.0.0 (18th)",
+                        " * Pipes 3.1.0 (15th)",
+                        " * Testing OSGi Mock 2.4.6 (14th)"));
     }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/CreateVersionJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/CreateVersionJiraAction.java
index e06b5cb..b1c18ed 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/CreateVersionJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/CreateVersionJiraAction.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -28,39 +30,37 @@ public class CreateVersionJiraAction implements JiraAction {
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if ( !ex.getRequestMethod().equals("POST") || 
-                !ex.getRequestURI().getPath().equals("/jira/rest/api/2/version") ) {
+        if (!ex.getRequestMethod().equals("POST")
+                || !ex.getRequestURI().getPath().equals("/jira/rest/api/2/version")) {
             return false;
         }
 
         Gson gson = new Gson();
-        try ( InputStreamReader reader = new InputStreamReader(ex.getRequestBody())) {
+        try (InputStreamReader reader = new InputStreamReader(ex.getRequestBody())) {
             VersionToCreate version = gson.fromJson(reader, VersionToCreate.class);
-            if ( version.getName() == null || version.getName().isEmpty() ) {
-                error(ex, gson, 
-                        er -> er.getErrors().put("name", "You must specify a valid version name"));
+            if (version.getName() == null || version.getName().isEmpty()) {
+                error(ex, gson, er -> er.getErrors().put("name", "You must specify a valid version name"));
                 return true;
             }
-            
-            if ( !"SLING".equals(version.getProject()) ) {
-                error(ex, gson, 
-                        er -> er.getErrorMessages().add("Project must be specified to create a version."));
+
+            if (!"SLING".equals(version.getProject())) {
+                error(ex, gson, er -> er.getErrorMessages().add("Project must be specified to create a version."));
                 return true;
             }
-            
+
             // note not all fields are sent, projectId and self are missing
             CreatedVersion createdVersion = new CreatedVersion();
             createdVersion.archived = false;
             createdVersion.id = ThreadLocalRandom.current().nextInt();
             createdVersion.released = false;
             createdVersion.name = version.getName();
-            
-            try ( OutputStreamWriter out = new OutputStreamWriter(ex.getResponseBody()) ) {
+
+            try (OutputStreamWriter out = new OutputStreamWriter(ex.getResponseBody())) {
                 ex.sendResponseHeaders(201, 0);
                 gson.toJson(createdVersion, out);
             }
         }
-        
+
         return true;
     }
 
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/EditVersionJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/EditVersionJiraAction.java
index 918bf32..7efb3a4 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/EditVersionJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/EditVersionJiraAction.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.jira;
 
 import java.io.IOException;
@@ -26,13 +26,12 @@ import java.util.List;
 import java.util.Optional;
 import java.util.regex.Pattern;
 
-import org.apache.sling.cli.impl.DateProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.sun.net.httpserver.HttpExchange;
+import org.apache.sling.cli.impl.DateProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class EditVersionJiraAction implements JiraAction {
 
@@ -59,9 +58,12 @@ public class EditVersionJiraAction implements JiraAction {
                 }
                 try (InputStreamReader reader = new InputStreamReader(in)) {
                     Gson gson = new Gson();
-                    Type collectionType = TypeToken.getParameterized(List.class, Version.class).getType();
+                    Type collectionType = TypeToken.getParameterized(List.class, Version.class)
+                            .getType();
                     List<Version> versions = gson.fromJson(reader, collectionType);
-                    Optional<Version> versionHolder = versions.stream().filter(v -> versionId == v.getId()).findFirst();
+                    Optional<Version> versionHolder = versions.stream()
+                            .filter(v -> versionId == v.getId())
+                            .findFirst();
                     if (versionHolder.isEmpty()) {
                         ex.sendResponseHeaders(404, -1);
                     } else {
@@ -71,9 +73,12 @@ public class EditVersionJiraAction implements JiraAction {
                             try (InputStreamReader requestReader = new InputStreamReader(ex.getRequestBody())) {
                                 VersionToUpdate versionToUpdate = gson.fromJson(requestReader, VersionToUpdate.class);
                                 DateProvider dateProvider = new DateProvider();
-                                if (versionToUpdate.released != version.isReleased() && versionToUpdate.released &&
-                                        dateProvider.getCurrentDateForJiraRelease().equals(versionToUpdate.releaseDate) &&
-                                        version.getReleaseDate() == null) {
+                                if (versionToUpdate.released != version.isReleased()
+                                        && versionToUpdate.released
+                                        && dateProvider
+                                                .getCurrentDateForJiraRelease()
+                                                .equals(versionToUpdate.releaseDate)
+                                        && version.getReleaseDate() == null) {
                                     ex.sendResponseHeaders(200, -1);
                                 }
                             }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/GetRelatedIssueCountsForVersionsJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/GetRelatedIssueCountsForVersionsJiraAction.java
index fd134e8..30ac445 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/GetRelatedIssueCountsForVersionsJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/GetRelatedIssueCountsForVersionsJiraAction.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -24,22 +26,20 @@ import com.sun.net.httpserver.HttpExchange;
 
 public class GetRelatedIssueCountsForVersionsJiraAction implements JiraAction {
 
-    private static final Pattern VERSION_RELATED_ISSUES = Pattern.compile("^/jira/rest/api/2/version/(\\d+)/relatedIssueCounts$");
+    private static final Pattern VERSION_RELATED_ISSUES =
+            Pattern.compile("^/jira/rest/api/2/version/(\\d+)/relatedIssueCounts$");
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if ( !ex.getRequestMethod().equals("GET") )
-            return false;
+        if (!ex.getRequestMethod().equals("GET")) return false;
 
         Matcher matcher = VERSION_RELATED_ISSUES.matcher(ex.getRequestURI().getPath());
-        if ( !matcher.matches() )
-            return false;
-        
+        if (!matcher.matches()) return false;
+
         int version = Integer.parseInt(matcher.group(1));
-        
+
         serveFileFromClasspath(ex, "/jira/relatedIssueCounts/" + version + ".json");
 
         return true;
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/IssueUpdateTest.java b/src/test/java/org/apache/sling/cli/impl/jira/IssueUpdateTest.java
index 7df38ae..684b800 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/IssueUpdateTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/IssueUpdateTest.java
@@ -1,32 +1,33 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
-import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertThat;
-
+import com.google.gson.Gson;
 import org.junit.Test;
 
-import com.google.gson.Gson;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
 
 /**
  * Validates that the JSON output is the same as the one expected by Jira
- * 
- * 
+ *
+ *
  */
 public class IssueUpdateTest {
 
@@ -35,9 +36,12 @@ public class IssueUpdateTest {
         IssueUpdate up = new IssueUpdate();
         up.recordAdd("fixVersions", "XSS API 1.0.2");
         up.recordRemove("fixVersions", "XSS API 1.0.0");
-        
+
         String out = new Gson().toJson(up);
-        
-        assertThat(out, equalTo("{\"update\":{\"fixVersions\":[{\"add\":{\"name\":\"XSS API 1.0.2\"}},{\"remove\":{\"name\":\"XSS API 1.0.0\"}}]}}"));
+
+        assertThat(
+                out,
+                equalTo(
+                        "{\"update\":{\"fixVersions\":[{\"add\":{\"name\":\"XSS API 1.0.2\"}},{\"remove\":{\"name\":\"XSS API 1.0.0\"}}]}}"));
     }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
index 896a878..3cfcafa 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -20,14 +22,13 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-import org.apache.http.NameValuePair;
-import org.apache.http.client.utils.URLEncodedUtils;
-
 import com.google.gson.Gson;
 import com.sun.net.httpserver.HttpExchange;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.utils.URLEncodedUtils;
 
 public class IssuesSearchJiraAction implements JiraAction {
-    
+
     private static final String COMMITTER_CLI_1_0_0_QUERY = "project = SLING AND fixVersion = \"Committer CLI 1.0.0\"";
     private static final String TRANSITIONS_0_1_0_QUERY = "project = SLING AND fixVersion = \"Transitions 0.1.0\"";
     private static final String TRANSITIONS_1_0_0_QUERY = "project = SLING AND fixVersion = \"Transitions 1.0.0\"";
@@ -35,15 +36,15 @@ public class IssuesSearchJiraAction implements JiraAction {
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if ( !ex.getRequestMethod().equals("GET") || 
-               !ex.getRequestURI().getPath().equals("/jira/rest/api/2/search") ) {
+        if (!ex.getRequestMethod().equals("GET")
+                || !ex.getRequestURI().getPath().equals("/jira/rest/api/2/search")) {
             return false;
         }
-        
+
         List<NameValuePair> parsed = URLEncodedUtils.parse(ex.getRequestURI(), StandardCharsets.UTF_8);
-        
-        for ( NameValuePair pair : parsed ) {
-            if ( "jql".equals(pair.getName())) {
+
+        for (NameValuePair pair : parsed) {
+            if ("jql".equals(pair.getName())) {
                 if (COMMITTER_CLI_1_0_0_QUERY.equals(pair.getValue())) {
                     serveFileFromClasspath(ex, "/jira/search/committer-cli-1.0.0.json");
                     return true;
@@ -59,10 +60,10 @@ public class IssuesSearchJiraAction implements JiraAction {
                 }
             }
         }
-        error(ex, new Gson(), er -> er.getErrorMessages().add("Unable to run unknown JQL query, available ones are [" +
-                COMMITTER_CLI_1_0_0_QUERY + "," + TRANSITIONS_1_0_0_QUERY +"]"));
-        
+        error(ex, new Gson(), er -> er.getErrorMessages()
+                .add("Unable to run unknown JQL query, available ones are [" + COMMITTER_CLI_1_0_0_QUERY + ","
+                        + TRANSITIONS_1_0_0_QUERY + "]"));
+
         return true;
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/JiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/JiraAction.java
index a2674b1..a1b3572 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/JiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/JiraAction.java
@@ -1,46 +1,39 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.jira;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.util.function.Consumer;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.sling.cli.impl.http.HttpExchangeHandler;
-import org.apache.sling.cli.impl.jira.ErrorResponse;
-
 import com.google.gson.Gson;
 import com.sun.net.httpserver.HttpExchange;
+import org.apache.sling.cli.impl.http.HttpExchangeHandler;
 
 public interface JiraAction extends HttpExchangeHandler {
-    
+
     default void error(HttpExchange httpExchange, Gson gson, Consumer<ErrorResponse> c) throws IOException {
-        try ( OutputStreamWriter out = new OutputStreamWriter(httpExchange.getResponseBody()) ) {
+        try (OutputStreamWriter out = new OutputStreamWriter(httpExchange.getResponseBody())) {
             httpExchange.sendResponseHeaders(400, 0);
             ErrorResponse er = new ErrorResponse();
             c.accept(er);
             gson.toJson(er, out);
         }
     }
-    
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/ListVersionsJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/ListVersionsJiraAction.java
index 49986d4..f922c92 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/ListVersionsJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/ListVersionsJiraAction.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -24,12 +26,12 @@ public class ListVersionsJiraAction implements JiraAction {
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        
-        if ( !ex.getRequestMethod().equals("GET") ||
-                !ex.getRequestURI().getPath().equals("/jira/rest/api/2/project/SLING/versions")) {
+
+        if (!ex.getRequestMethod().equals("GET")
+                || !ex.getRequestURI().getPath().equals("/jira/rest/api/2/project/SLING/versions")) {
             return false;
         }
-        
+
         serveFileFromClasspath(ex, "/jira/versions.json");
         return true;
     }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/MockJira.java b/src/test/java/org/apache/sling/cli/impl/jira/MockJira.java
index 393f577..062c6de 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/MockJira.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/MockJira.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -22,42 +24,42 @@ import java.util.List;
 import java.util.Set;
 import java.util.regex.Pattern;
 
-import org.apache.sling.cli.impl.http.HttpExchangeHandler;
-import org.junit.rules.ExternalResource;
-
 import com.sun.net.httpserver.Authenticator;
 import com.sun.net.httpserver.BasicAuthenticator;
 import com.sun.net.httpserver.HttpContext;
 import com.sun.net.httpserver.HttpExchange;
 import com.sun.net.httpserver.HttpPrincipal;
 import com.sun.net.httpserver.HttpServer;
+import org.apache.sling.cli.impl.http.HttpExchangeHandler;
+import org.junit.rules.ExternalResource;
 
 public class MockJira extends ExternalResource {
-    
+
     static final String AUTH_USER = "asf-user";
     static final String AUTH_PWD = "asf-password";
-    private static final Set<Pattern> GET_PATHS_REQUIRING_AUTH = Set.of(Pattern.compile("/jira/rest/api/2/issue/\\d+/transitions"));
-    
+    private static final Set<Pattern> GET_PATHS_REQUIRING_AUTH =
+            Set.of(Pattern.compile("/jira/rest/api/2/issue/\\d+/transitions"));
+
     public static void main(String[] args) throws Throwable {
-        
+
         MockJira mj = new MockJira();
         mj.before();
         System.out.println(mj.getBoundPort());
     }
 
     private HttpServer server;
-    
+
     @Override
     protected void before() throws Throwable {
         server = HttpServer.create(new InetSocketAddress("localhost", 0), 0);
         HttpContext rootContext = server.createContext("/");
         rootContext.setAuthenticator(new BasicAuthenticator(getClass().getSimpleName()) {
-            
+
             @Override
             public boolean checkCredentials(String username, String password) {
                 return AUTH_USER.equals(username) && AUTH_PWD.equals(password);
             }
-            
+
             @Override
             public Result authenticate(HttpExchange t) {
                 if ("GET".equals(t.getRequestMethod())) {
@@ -66,12 +68,13 @@ public class MockJira extends ExternalResource {
                             return super.authenticate(t);
                         }
                     }
-                    return new Authenticator.Success(new HttpPrincipal("anonymous", getClass().getSimpleName()));
+                    return new Authenticator.Success(
+                            new HttpPrincipal("anonymous", getClass().getSimpleName()));
                 }
                 return super.authenticate(t);
             }
         });
-        
+
         List<HttpExchangeHandler> actions = new ArrayList<>();
         actions.add(new ListVersionsJiraAction());
         actions.add(new GetRelatedIssueCountsForVersionsJiraAction());
@@ -85,27 +88,26 @@ public class MockJira extends ExternalResource {
             ex.sendResponseHeaders(400, -1);
             return true;
         });
-        
+
         rootContext.setHandler(httpExchange -> {
-            
-            for ( HttpExchangeHandler action : actions ) {
-                if ( action.tryHandle(httpExchange) ) {
+            for (HttpExchangeHandler action : actions) {
+                if (action.tryHandle(httpExchange)) {
                     break;
                 }
             }
         });
-        
+
         server.start();
     }
 
     @Override
     protected void after() {
-        
+
         server.stop(0);
     }
-    
+
     public int getBoundPort() {
-        
+
         return server.getAddress().getPort();
     }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/TransitionsJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/TransitionsJiraAction.java
index 314c698..aeb2f80 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/TransitionsJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/TransitionsJiraAction.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.jira;
 
 import java.io.IOException;
@@ -29,7 +29,8 @@ import com.sun.net.httpserver.HttpExchange;
 public class TransitionsJiraAction implements JiraAction {
 
     private static final Pattern TRANSITIONS = Pattern.compile("/jira/rest/api/2/issue/\\d+/transitions");
-    private static final Pattern RETURN_NO_TRANSITIONS = Pattern.compile("/jira/rest/api/2/issue/(1|2|3|4)/transitions");
+    private static final Pattern RETURN_NO_TRANSITIONS =
+            Pattern.compile("/jira/rest/api/2/issue/(1|2|3|4)/transitions");
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
@@ -44,7 +45,7 @@ public class TransitionsJiraAction implements JiraAction {
             }
         } else if (ex.getRequestMethod().equals("POST")) {
             Gson gson = new Gson();
-            try ( InputStreamReader reader = new InputStreamReader(ex.getRequestBody())) {
+            try (InputStreamReader reader = new InputStreamReader(ex.getRequestBody())) {
                 TransitionToExecute transitionToExecute = gson.fromJson(reader, TransitionToExecute.class);
                 if (701 == transitionToExecute.transition.getId()) {
                     ex.sendResponseHeaders(204, -1);
@@ -59,8 +60,6 @@ public class TransitionsJiraAction implements JiraAction {
     }
 
     private static class TransitionToExecute {
-       private Transition transition;
+        private Transition transition;
     }
-
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java b/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
index a0607ea..0a95c3c 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
@@ -1,18 +1,20 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.jira;
 
@@ -43,76 +45,83 @@ import static org.junit.Assert.assertTrue;
 public class VersionClientTest {
 
     private static final Map<String, String> SYSTEM_PROPS = new HashMap<>();
+
     static {
         SYSTEM_PROPS.put("asf.username", "asf-user");
         SYSTEM_PROPS.put("asf.password", "asf-password");
     }
-    
+
     @Rule
     public final OsgiContext context = new OsgiContext();
-    
+
     @Rule
     public final SystemPropertiesRule sysProps = new SystemPropertiesRule(SYSTEM_PROPS);
-    
+
     @Rule
     public final MockJira mockJira = new MockJira();
 
     private VersionClient versionClient;
-    
+
     @Before
     public void prepareDependencies() {
         context.registerInjectActivateService(new CredentialsService());
         context.registerInjectActivateService(new DateProvider());
-        context.registerInjectActivateService(new HttpClientFactory(), "jira.host", "localhost", "jira.port", mockJira.getBoundPort());
-        versionClient = context.registerInjectActivateService(new VersionClient(), "jira.url", "http://localhost:" + mockJira.getBoundPort() + "/jira");
+        context.registerInjectActivateService(
+                new HttpClientFactory(), "jira.host", "localhost", "jira.port", mockJira.getBoundPort());
+        versionClient = context.registerInjectActivateService(
+                new VersionClient(), "jira.url", "http://localhost:" + mockJira.getBoundPort() + "/jira");
     }
-    
+
     @Test
     public void findMatchingVersion() {
-        
-        Version version = versionClient.find(Release.fromString("XSS Protection API 1.0.2").get(0));
-        
+
+        Version version = versionClient.find(
+                Release.fromString("XSS Protection API 1.0.2").get(0));
+
         assertThat("version", version, notNullValue());
         assertThat("version.name", version.getName(), equalTo("XSS Protection API 1.0.2"));
         assertThat("version.id", version.getId(), equalTo(12329667));
-        assertThat("version.issuesFixedCount", version.getIssuesFixedCount(), equalTo(1)); 
+        assertThat("version.issuesFixedCount", version.getIssuesFixedCount(), equalTo(1));
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void missingVersionNotFound() {
-        
+
         versionClient.find(Release.fromString("XSS Protection API 1.0.3").get(0));
     }
-    
+
     @Test
     public void findSuccessorVersion() {
-        Version successor = versionClient.findSuccessorVersion(Release.fromString("XSS Protection API 1.0.2").get(0));
-        
+        Version successor = versionClient.findSuccessorVersion(
+                Release.fromString("XSS Protection API 1.0.2").get(0));
+
         assertThat("successor", successor, notNullValue());
         assertThat("successor.name", successor.getName(), equalTo("XSS Protection API 1.0.4"));
     }
 
     @Test
     public void noSuccessorVersion() {
-        Version successor = versionClient.findSuccessorVersion(Release.fromString("XSS Protection API 1.0.16").get(0));
-        
+        Version successor = versionClient.findSuccessorVersion(
+                Release.fromString("XSS Protection API 1.0.16").get(0));
+
         assertThat("successor", successor, nullValue());
     }
-    
+
     @Test
     public void createVersion() throws IOException {
         versionClient.create("XSS Protection API 2.0.10");
     }
-    
+
     @Test(expected = IOException.class)
     public void illegalVersionFails() throws IOException {
         versionClient.create("");
     }
-    
+
     @Test
     public void findUnresolvedIssuesForVersion() throws IOException {
-        List<Issue> issues = versionClient.findUnresolvedIssues(Release.fromString("Committer CLI 1.0.0").get(0));
-        
+        List<Issue> issues = versionClient.findUnresolvedIssues(
+                Release.fromString("Committer CLI 1.0.0").get(0));
+
         assertThat(issues, hasSize(2));
         assertThat(issues.get(0).getKey(), equalTo("SLING-8338"));
         assertThat(issues.get(0).getStatus(), equalTo("Open"));
@@ -122,7 +131,8 @@ public class VersionClientTest {
 
     @Test
     public void findFixedIssuesForVersion() throws IOException {
-        List<Issue> issues = versionClient.findFixedIssues(Release.fromString("Committer CLI 1.0.0").get(0));
+        List<Issue> issues = versionClient.findFixedIssues(
+                Release.fromString("Committer CLI 1.0.0").get(0));
 
         assertThat(issues, hasSize(7));
         assertThat(issues.get(0).getKey(), equalTo("SLING-8707"));
@@ -151,8 +161,12 @@ public class VersionClientTest {
             exception = e;
         }
         assertNotNull("The VersionClient should not have allowed a release with unresolved issues.", exception);
-        assertTrue("SLING-8337 should have been reported as unresolved.", exception.getMessage().contains("SLING-8337"));
-        assertTrue("SLING-8338 should have been reported as unresolved.", exception.getMessage().contains("SLING-8338"));
+        assertTrue(
+                "SLING-8337 should have been reported as unresolved.",
+                exception.getMessage().contains("SLING-8337"));
+        assertTrue(
+                "SLING-8338 should have been reported as unresolved.",
+                exception.getMessage().contains("SLING-8338"));
     }
 
     @Test
@@ -178,5 +192,4 @@ public class VersionClientTest {
         }
         assertNull("Did not expect an error, since this case should be handled graciously.", throwable);
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/junit/SystemPropertiesRule.java b/src/test/java/org/apache/sling/cli/impl/junit/SystemPropertiesRule.java
index 1cb849d..5c79553 100644
--- a/src/test/java/org/apache/sling/cli/impl/junit/SystemPropertiesRule.java
+++ b/src/test/java/org/apache/sling/cli/impl/junit/SystemPropertiesRule.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.junit;
 
 import java.util.HashMap;
@@ -31,23 +31,20 @@ public class SystemPropertiesRule extends ExternalResource {
     public SystemPropertiesRule(Map<String, String> propsToOverride) {
         this.propsToOverride = propsToOverride;
     }
-    
+
     @Override
     protected void before() {
-        for (Map.Entry<String, String> prop : propsToOverride.entrySet() )
-            propsToRestore.put(prop.getKey(), set(prop));
+        for (Map.Entry<String, String> prop : propsToOverride.entrySet()) propsToRestore.put(prop.getKey(), set(prop));
     }
 
     private String set(Map.Entry<String, String> prop) {
-        if ( prop.getValue() != null )
-            return System.setProperty(prop.getKey(), prop.getValue());
-        
+        if (prop.getValue() != null) return System.setProperty(prop.getKey(), prop.getValue());
+
         return System.clearProperty(prop.getKey());
     }
-    
+
     @Override
     protected void after() {
-        for (Map.Entry<String, String> prop : propsToRestore.entrySet() )
-            set(prop);
+        for (Map.Entry<String, String> prop : propsToRestore.entrySet()) set(prop);
     }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/MockNexus.java b/src/test/java/org/apache/sling/cli/impl/nexus/MockNexus.java
index d4a9cee..c4e76b5 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/MockNexus.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/MockNexus.java
@@ -1,36 +1,35 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.sling.cli.impl.http.HttpExchangeHandler;
-import org.junit.rules.ExternalResource;
-
 import com.sun.net.httpserver.Authenticator;
 import com.sun.net.httpserver.BasicAuthenticator;
 import com.sun.net.httpserver.HttpContext;
 import com.sun.net.httpserver.HttpExchange;
 import com.sun.net.httpserver.HttpPrincipal;
 import com.sun.net.httpserver.HttpServer;
+import org.apache.sling.cli.impl.http.HttpExchangeHandler;
+import org.junit.rules.ExternalResource;
 
 public class MockNexus extends ExternalResource {
 
@@ -52,9 +51,11 @@ public class MockNexus extends ExternalResource {
 
             @Override
             public Result authenticate(HttpExchange t) {
-                if ( t.getRequestMethod().contentEquals("GET") ) {
-                    if (!"/service/local/staging/profile_repositories".equals(t.getRequestURI().getPath())) {
-                        return new Authenticator.Success(new HttpPrincipal("anonymous", getClass().getSimpleName()));
+                if (t.getRequestMethod().contentEquals("GET")) {
+                    if (!"/service/local/staging/profile_repositories"
+                            .equals(t.getRequestURI().getPath())) {
+                        return new Authenticator.Success(
+                                new HttpPrincipal("anonymous", getClass().getSimpleName()));
                     }
                 }
                 return super.authenticate(t);
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/QueryLuceneIndexHandler.java b/src/test/java/org/apache/sling/cli/impl/nexus/QueryLuceneIndexHandler.java
index e5ae980..a17855f 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/QueryLuceneIndexHandler.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/QueryLuceneIndexHandler.java
@@ -1,27 +1,28 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
+import com.sun.net.httpserver.HttpExchange;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URLEncodedUtils;
@@ -29,16 +30,14 @@ import org.apache.sling.cli.impl.http.HttpExchangeHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.sun.net.httpserver.HttpExchange;
-
 public class QueryLuceneIndexHandler implements HttpExchangeHandler {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(QueryLuceneIndexHandler.class);
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if ( !ex.getRequestMethod().equals("GET") ||
-                !ex.getRequestURI().getPath().equals("/service/local/lucene/search")) {
+        if (!ex.getRequestMethod().equals("GET")
+                || !ex.getRequestURI().getPath().equals("/service/local/lucene/search")) {
             return false;
         }
         String group = null;
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryContentHandler.java b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryContentHandler.java
index 084490f..b9f7233 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryContentHandler.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryContentHandler.java
@@ -1,34 +1,34 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.io.IOException;
 
-import org.apache.sling.cli.impl.http.HttpExchangeHandler;
-
 import com.sun.net.httpserver.HttpExchange;
+import org.apache.sling.cli.impl.http.HttpExchangeHandler;
 
 public class RepositoryContentHandler implements HttpExchangeHandler {
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if (!"GET".equals(ex.getRequestMethod()) && !ex.getRequestURI().getPath().startsWith("/content/repositories/")) {
+        if (!"GET".equals(ex.getRequestMethod())
+                && !ex.getRequestURI().getPath().startsWith("/content/repositories/")) {
             return false;
         }
         serveFileFromClasspath(ex, "/nexus/" + ex.getRequestURI().getPath().substring(22));
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
index bc48786..55e387b 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.io.IOException;
@@ -75,9 +75,10 @@ public class RepositoryServiceTest {
     @Before
     public void prepareDependencies() {
         context.registerInjectActivateService(new CredentialsService());
-        context.registerInjectActivateService(new HttpClientFactory(), "nexus.host", "localhost", "nexus.port", nexus.getBoundPort());
-        repositoryService = context.registerInjectActivateService(new RepositoryService(), "nexus.url.prefix",
-                "http://localhost:" + nexus.getBoundPort());
+        context.registerInjectActivateService(
+                new HttpClientFactory(), "nexus.host", "localhost", "nexus.port", nexus.getBoundPort());
+        repositoryService = context.registerInjectActivateService(
+                new RepositoryService(), "nexus.url.prefix", "http://localhost:" + nexus.getBoundPort());
     }
 
     @Test
@@ -98,7 +99,9 @@ public class RepositoryServiceTest {
         assertEquals(2, stagingRepositories.size());
         Set<String> repositoriesIds = new HashSet<>(Set.of("orgapachesling-0", "orgapachesling-1"));
         for (StagingRepository repository : stagingRepositories) {
-            assertEquals("http://localhost:" + nexus.getBoundPort() + "/content/repositories/" + repository.getRepositoryId(),
+            assertEquals(
+                    "http://localhost:" + nexus.getBoundPort() + "/content/repositories/"
+                            + repository.getRepositoryId(),
                     repository.repositoryURI);
             repositoriesIds.remove(repository.getRepositoryId());
         }
@@ -114,8 +117,11 @@ public class RepositoryServiceTest {
             if ("pom".equals(artifact.getType())) {
                 repositoryService.processArtifactStream(artifact, inputStream -> {
                     try (InputStream stream = inputStream) {
-                        assertEquals(IOUtils.resourceToString("/nexus/orgapachesling-0/org/apache/sling/adapter-annotations/1.0" +
-                                        ".0/adapter-annotations-1.0.0.pom", StandardCharsets.UTF_8),
+                        assertEquals(
+                                IOUtils.resourceToString(
+                                        "/nexus/orgapachesling-0/org/apache/sling/adapter-annotations/1.0"
+                                                + ".0/adapter-annotations-1.0.0.pom",
+                                        StandardCharsets.UTF_8),
                                 IOUtils.toString(stream, StandardCharsets.UTF_8));
                         processed.set(true);
                     } catch (IOException e) {
@@ -135,15 +141,17 @@ public class RepositoryServiceTest {
         for (Artifact artifact : localRepository.getArtifacts()) {
             assertTrue(Files.exists(localRepository.getRootFolder().resolve(artifact.getRepositoryRelativePath())));
         }
-        List<Path> artifactFiles =
-                Files.walk(localRepository.getRootFolder()).filter(path -> path.toFile().isFile()).collect(Collectors.toList());
+        List<Path> artifactFiles = Files.walk(localRepository.getRootFolder())
+                .filter(path -> path.toFile().isFile())
+                .collect(Collectors.toList());
         LOGGER.debug("Cleaning {}.", localRepository.getRootFolder());
         for (Path artifactFile : artifactFiles) {
             LOGGER.debug("Deleting file {}.", artifactFile.toString());
             Files.delete(artifactFile);
         }
-        List<Path> emptyDirectories =
-                Files.walk(localRepository.getRootFolder()).filter(path -> path.toFile().isDirectory()).collect(Collectors.toList());
+        List<Path> emptyDirectories = Files.walk(localRepository.getRootFolder())
+                .filter(path -> path.toFile().isDirectory())
+                .collect(Collectors.toList());
         Collections.reverse(emptyDirectories);
         for (Path directory : emptyDirectories) {
             LOGGER.debug("Deleting empty folder {}.", directory.toString());
@@ -160,11 +168,11 @@ public class RepositoryServiceTest {
         assertEquals("Sling Adapter Annotations 1.0.0", release.getFullName());
     }
 
-
     private StagingRepository getStagingRepository() {
         StagingRepository stagingRepository = new StagingRepository();
         stagingRepository.setRepositoryId("orgapachesling-0");
-        stagingRepository.setRepositoryURI("http://localhost:" + nexus.getBoundPort() + "/content/repositories/orgapachesling-0");
+        stagingRepository.setRepositoryURI(
+                "http://localhost:" + nexus.getBoundPort() + "/content/repositories/orgapachesling-0");
         return stagingRepository;
     }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/StagingRepositoriesHandler.java b/src/test/java/org/apache/sling/cli/impl/nexus/StagingRepositoriesHandler.java
index 4bd432e..c0612f9 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/StagingRepositoriesHandler.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/StagingRepositoriesHandler.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.nexus;
 
 import java.io.IOException;
@@ -23,26 +23,27 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
 
+import com.sun.net.httpserver.HttpExchange;
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.cli.impl.http.HttpExchangeHandler;
 
-import com.sun.net.httpserver.HttpExchange;
-
 public class StagingRepositoriesHandler implements HttpExchangeHandler {
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
-        if ( !ex.getRequestMethod().equals("GET") ||
-                !ex.getRequestURI().getPath().equals("/service/local/staging/profile_repositories")) {
+        if (!ex.getRequestMethod().equals("GET")
+                || !ex.getRequestURI().getPath().equals("/service/local/staging/profile_repositories")) {
             return false;
         }
         InputStream in = getClass().getResourceAsStream("/nexus/staging-repositories.json");
         String json = IOUtils.toString(in, StandardCharsets.UTF_8);
-        String processedJson =
-                json.replaceAll("\\{nexusHost\\}", "http://localhost:" + ex.getHttpContext().getServer().getAddress().getPort());
+        String processedJson = json.replaceAll(
+                "\\{nexusHost\\}",
+                "http://localhost:"
+                        + ex.getHttpContext().getServer().getAddress().getPort());
         byte[] bytes = processedJson.getBytes(StandardCharsets.UTF_8);
         ex.sendResponseHeaders(200, bytes.length);
-        try ( OutputStream out = ex.getResponseBody() ) {
+        try (OutputStream out = ex.getResponseBody()) {
             out.write(bytes);
         }
         return true;
diff --git a/src/test/java/org/apache/sling/cli/impl/pgp/HashValidatorTest.java b/src/test/java/org/apache/sling/cli/impl/pgp/HashValidatorTest.java
index f8a224e..08687bd 100644
--- a/src/test/java/org/apache/sling/cli/impl/pgp/HashValidatorTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/pgp/HashValidatorTest.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.pgp;
 
 import java.nio.file.Paths;
@@ -42,44 +42,54 @@ public class HashValidatorTest {
 
     @Test
     public void testValidHashes() {
-        HashValidator.ValidationResult result = hashValidator.validate(Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache" +
-                "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom" ), Paths.get("src/test/resources/nexus/orgapachesling-0" +
-                "/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.md5"), "MD5");
+        HashValidator.ValidationResult result = hashValidator.validate(
+                Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache"
+                        + "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom"),
+                Paths.get("src/test/resources/nexus/orgapachesling-0"
+                        + "/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.md5"),
+                "MD5");
         assertTrue(result.isValid());
 
-        result = hashValidator.validate(Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache" +
-                "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom" ), Paths.get("src/test/resources/nexus/orgapachesling-0" +
-                "/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.sha1"), "SHA-1");
+        result = hashValidator.validate(
+                Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache"
+                        + "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom"),
+                Paths.get("src/test/resources/nexus/orgapachesling-0"
+                        + "/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.sha1"),
+                "SHA-1");
         assertTrue(result.isValid());
     }
 
     @Test
     public void testTamperedFile() {
-        HashValidator.ValidationResult result = hashValidator
-                .validate(Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"), Paths.get(
+        HashValidator.ValidationResult result = hashValidator.validate(
+                Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"),
+                Paths.get(
                         "src/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.md5"),
-                        "MD5");
+                "MD5");
         assertFalse(result.isValid());
 
-        result = hashValidator
-                .validate(Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"), Paths.get(
+        result = hashValidator.validate(
+                Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"),
+                Paths.get(
                         "src/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom.md5"),
-                        "SHA-1");
+                "SHA-1");
         assertFalse(result.isValid());
     }
 
     @Test
     public void testChangedHashes() {
-        HashValidator.ValidationResult result = hashValidator.validate(Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache" +
-                "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom" ), Paths.get("src/test/resources/pgp/adapter-annotations" +
-                "-1.0.0.pom.changed.md5"), "MD5");
+        HashValidator.ValidationResult result = hashValidator.validate(
+                Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache"
+                        + "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom"),
+                Paths.get("src/test/resources/pgp/adapter-annotations" + "-1.0.0.pom.changed.md5"),
+                "MD5");
         assertFalse(result.isValid());
 
-        result = hashValidator.validate(Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache" +
-                "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom" ), Paths.get("src/test/resources/pgp/adapter-annotations" +
-                "-1.0.0.pom.changed.sha1"), "SHA-1");
+        result = hashValidator.validate(
+                Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache"
+                        + "/sling/adapter-annotations/1.0.0/adapter-annotations-1.0.0.pom"),
+                Paths.get("src/test/resources/pgp/adapter-annotations" + "-1.0.0.pom.changed.sha1"),
+                "SHA-1");
         assertFalse(result.isValid());
     }
-
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidatorTest.java b/src/test/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidatorTest.java
index 9d9ed28..4d38047 100644
--- a/src/test/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidatorTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/pgp/PGPSignatureValidatorTest.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.pgp;
 
 import java.nio.file.Paths;
@@ -56,11 +56,12 @@ public class PGPSignatureValidatorTest {
 
     @Test
     public void verifyPGPSignatures() {
-        PGPSignatureValidator.ValidationResult result = pgpSignatureValidator.verify(Paths.get("src/test/resources/nexus/orgapachesling-0" +
-                "/org/apache/sling/adapter" +
-                "-annotations/1.0" +
-                ".0/adapter-annotations-1.0.0.pom"), Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter" +
-                "-annotations/1.0.0/adapter-annotations-1.0.0.pom.asc"));
+        PGPSignatureValidator.ValidationResult result = pgpSignatureValidator.verify(
+                Paths.get("src/test/resources/nexus/orgapachesling-0" + "/org/apache/sling/adapter"
+                        + "-annotations/1.0"
+                        + ".0/adapter-annotations-1.0.0.pom"),
+                Paths.get("src/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter"
+                        + "-annotations/1.0.0/adapter-annotations-1.0.0.pom.asc"));
         assertTrue(result.isValid());
         Iterator<String> ids = result.getKey().getUserIDs();
         boolean foundId = false;
@@ -76,10 +77,10 @@ public class PGPSignatureValidatorTest {
     public void verifyInvalidPGPSignatures() {
         Throwable expected = null;
         try {
-            pgpSignatureValidator.verify(Paths.get("src/test/resources/nexus/orgapachesling-0" +
-                            "/org/apache/sling/adapter" +
-                            "-annotations/1.0" +
-                            ".0/adapter-annotations-1.0.0.pom"),
+            pgpSignatureValidator.verify(
+                    Paths.get("src/test/resources/nexus/orgapachesling-0" + "/org/apache/sling/adapter"
+                            + "-annotations/1.0"
+                            + ".0/adapter-annotations-1.0.0.pom"),
                     Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.pom.invalid.asc"));
         } catch (Throwable e) {
             expected = e;
@@ -90,10 +91,10 @@ public class PGPSignatureValidatorTest {
 
     @Test
     public void verifyChangedFile() {
-        PGPSignatureValidator.ValidationResult result =
-                pgpSignatureValidator.verify(Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"), Paths.get("src" +
-                        "/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter" +
-                        "-annotations/1.0.0/adapter-annotations-1.0.0.pom.asc"));
+        PGPSignatureValidator.ValidationResult result = pgpSignatureValidator.verify(
+                Paths.get("src/test/resources/pgp/adapter-annotations-1.0.0.changed.pom"),
+                Paths.get("src" + "/test/resources/nexus/orgapachesling-0/org/apache/sling/adapter"
+                        + "-annotations/1.0.0/adapter-annotations-1.0.0.pom.asc"));
         assertFalse(result.isValid());
         Iterator<String> ids = result.getKey().getUserIDs();
         boolean foundId = false;
@@ -109,8 +110,7 @@ public class PGPSignatureValidatorTest {
     public void prepareDependencies() {
         context.registerInjectActivateService(new CredentialsService());
         context.registerInjectActivateService(new HttpClientFactory());
-        pgpSignatureValidator = context.registerInjectActivateService(new PGPSignatureValidator(), "sling.keys", "src/test/resources" +
-                "/people/sling-keys.asc");
+        pgpSignatureValidator = context.registerInjectActivateService(
+                new PGPSignatureValidator(), "sling.keys", "src/test/resources" + "/people/sling-keys.asc");
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
index ba64b51..cc94b6e 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommandTest.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import java.io.IOException;
@@ -30,8 +30,8 @@ import org.apache.sling.cli.impl.jira.Issue;
 import org.apache.sling.cli.impl.jira.Version;
 import org.apache.sling.cli.impl.jira.VersionClient;
 import org.apache.sling.cli.impl.mail.Mailer;
-import org.apache.sling.cli.impl.nexus.StagingRepository;
 import org.apache.sling.cli.impl.nexus.RepositoryService;
+import org.apache.sling.cli.impl.nexus.StagingRepository;
 import org.apache.sling.cli.impl.people.Member;
 import org.apache.sling.cli.impl.people.MembersFinder;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
@@ -39,7 +39,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.osgi.framework.ServiceReference;
 import org.powermock.reflect.Whitebox;
-
 import picocli.CommandLine;
 
 import static org.junit.Assert.assertEquals;
@@ -69,41 +68,39 @@ public class PrepareVoteEmailCommandTest {
         Whitebox.setInternalState(prepareVoteEmailCommand, "repositoryId", 123);
         osgiContext.registerInjectActivateService(prepareVoteEmailCommand);
 
-        ServiceReference<?> reference =
-                osgiContext.bundleContext().getServiceReference(Command.class.getName());
+        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
         Command command = (Command) osgiContext.bundleContext().getService(reference);
-        assertEquals(CommandLine.ExitCode.OK, (int)command.call());
-        verify(mailer).send(
-                "From: John Doe <jo...@apache.org>\n" +
-                        "To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                        "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                        "Date: Thu, 1 Jan 1970 01:00:00 +0100\n" +
-                        "Subject: [VOTE] Release Apache Sling CLI Test 1.0.0\n" +
-                        "\n" +
-                        "Hi,\n" +
-                        "\n" +
-                        "We solved 42 issues in this release:\n" +
-                        "https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310710&version=1&styleName=Text\n" +
-                        "\n" +
-                        "Staging repository:\n" +
-                        "https://repository.apache.org/content/repositories/orgapachesling-123/\n" +
-                        "\n" +
-                        "You can use this UNIX script to download the release and verify the signatures:\n" +
-                        "https://raw.githubusercontent.com/apache/sling-tooling-release/master/check_staged_release.sh\n" +
-                        "\n" +
-                        "Usage:\n" +
-                        "sh check_staged_release.sh 123 /tmp/sling-staging\n" +
-                        "\n" +
-                        "Please vote to approve this release:\n" +
-                        "\n" +
-                        "  [ ] +1 Approve the release\n" +
-                        "  [ ]  0 Don't care\n" +
-                        "  [ ] -1 Don't release, because ...\n" +
-                        "\n" +
-                        "This majority vote is open for at least 72 hours.\n" +
-                        "\n" +
-                        "Regards,\n" +
-                        "John Doe\n");
+        assertEquals(CommandLine.ExitCode.OK, (int) command.call());
+        verify(mailer)
+                .send("From: John Doe <jo...@apache.org>\n" + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Date: Thu, 1 Jan 1970 01:00:00 +0100\n"
+                        + "Subject: [VOTE] Release Apache Sling CLI Test 1.0.0\n"
+                        + "\n"
+                        + "Hi,\n"
+                        + "\n"
+                        + "We solved 42 issues in this release:\n"
+                        + "https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310710&version=1&styleName=Text\n"
+                        + "\n"
+                        + "Staging repository:\n"
+                        + "https://repository.apache.org/content/repositories/orgapachesling-123/\n"
+                        + "\n"
+                        + "You can use this UNIX script to download the release and verify the signatures:\n"
+                        + "https://raw.githubusercontent.com/apache/sling-tooling-release/master/check_staged_release.sh\n"
+                        + "\n"
+                        + "Usage:\n"
+                        + "sh check_staged_release.sh 123 /tmp/sling-staging\n"
+                        + "\n"
+                        + "Please vote to approve this release:\n"
+                        + "\n"
+                        + "  [ ] +1 Approve the release\n"
+                        + "  [ ]  0 Don't care\n"
+                        + "  [ ] -1 Don't release, because ...\n"
+                        + "\n"
+                        + "This majority vote is open for at least 72 hours.\n"
+                        + "\n"
+                        + "Regards,\n"
+                        + "John Doe\n");
     }
 
     private void prepareExecution(Mailer mailer) throws IOException {
diff --git a/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java b/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
index 6e3d688..94e68e0 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
@@ -1,25 +1,23 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.sling.cli.impl.release;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
@@ -29,17 +27,21 @@ import java.util.List;
 
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 public class ReleaseTest {
 
     @Test
     public void fromRepositoryDescription() {
-        
+
         List<Release> releases1 = Release.fromString("Apache Sling Resource Merger 1.3.10 RC1");
         List<Release> releases2 = Release.fromString("   Apache Sling Resource Merger    1.3.10   ");
-        
+
         assertEquals(1, releases1.size());
         assertEquals(1, releases2.size());
-        
+
         Release rel1 = releases1.get(0);
         Release rel2 = releases2.get(0);
 
@@ -56,23 +58,24 @@ public class ReleaseTest {
         List<Release> releases = Release.fromString("Apache Sling Parent 35, Apache Sling Bundle Parent 35");
         assertEquals(2, releases.size());
     }
-    
+
     @Test(expected = IllegalArgumentException.class)
     public void noReleasesFailsFast() {
         Release.fromString("");
     }
-    
+
     @Test
     public void releaseWithRCSuffixOnly() {
         List<Release> releases = Release.fromString("Apache Sling Resource Resolver 1.6.12 RC");
-        
+
         assertEquals(1, releases.size());
         assertEquals("Apache Sling Resource Resolver 1.6.12", releases.get(0).getFullName());
     }
 
     @Test
     public void testReleaseParsingWithJIRAInfo() throws URISyntaxException, IOException {
-        BufferedReader reader = new BufferedReader(new FileReader(new File(getClass().getResource("/jira_versions.txt").toURI())));
+        BufferedReader reader = new BufferedReader(new FileReader(
+                new File(getClass().getResource("/jira_versions.txt").toURI())));
         reader.lines().forEach(line -> {
             if (!line.startsWith("#") && !"".equals(line)) {
                 List<Release> jiraReleases = Release.fromString(line);
@@ -94,25 +97,23 @@ public class ReleaseTest {
     public void nextVersion() {
         Release release = Release.fromString("Apache Sling Foo 1.0.2").get(0);
         Release next = release.next();
-        
+
         assertEquals("Apache Sling Foo 1.0.4", next.getFullName());
     }
-    
+
     @Test
     public void nextVersionWithSingleNumber() {
         Release release = Release.fromString("Apache Sling Bar 2").get(0);
         Release next = release.next();
-        
+
         assertEquals("Apache Sling Bar 3", next.getFullName());
     }
-    
+
     @Test
     public void releaseWithJavaInfo() {
         List<Release> releases = Release.fromString("Parent 60 (Java 11)");
-        
+
         assertEquals("releases.size", 1, releases.size());
         assertEquals("release.fullName", "Parent 60 (Java 11)", releases.get(0).getFullName());
-        
     }
-
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
index d58e73d..8ef0b22 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
@@ -1,31 +1,31 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
+import javax.mail.internet.InternetAddress;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.mail.internet.InternetAddress;
-
 import org.apache.sling.cli.impl.Command;
 import org.apache.sling.cli.impl.Credentials;
 import org.apache.sling.cli.impl.CredentialsService;
@@ -34,8 +34,8 @@ import org.apache.sling.cli.impl.ExecutionMode;
 import org.apache.sling.cli.impl.mail.Email;
 import org.apache.sling.cli.impl.mail.Mailer;
 import org.apache.sling.cli.impl.mail.VoteThreadFinder;
-import org.apache.sling.cli.impl.nexus.StagingRepository;
 import org.apache.sling.cli.impl.nexus.RepositoryService;
+import org.apache.sling.cli.impl.nexus.StagingRepository;
 import org.apache.sling.cli.impl.people.Member;
 import org.apache.sling.cli.impl.people.MembersFinder;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
@@ -50,7 +50,6 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import picocli.CommandLine;
 
 import static org.junit.Assert.assertEquals;
@@ -62,12 +61,12 @@ import static org.powermock.api.mockito.PowerMockito.mockStatic;
 
 @RunWith(PowerMockRunner.class)
 @PowerMockIgnore({
-                         // https://github.com/powermock/powermock/issues/864
-                         "com.sun.org.apache.xerces.*",
-                         "javax.xml.*",
-                         "org.w3c.dom.*",
-                         "javax.net.ssl.*"
-                 })
+    // https://github.com/powermock/powermock/issues/864
+    "com.sun.org.apache.xerces.*",
+    "javax.xml.*",
+    "org.w3c.dom.*",
+    "javax.net.ssl.*"
+})
 public class TallyVotesCommandTest {
 
     @Before
@@ -86,15 +85,17 @@ public class TallyVotesCommandTest {
         mockStatic(LoggerFactory.class);
         Logger logger = mock(Logger.class);
         when(LoggerFactory.getLogger(TallyVotesCommand.class)).thenReturn(logger);
-        List<Email> thread = new ArrayList<>(){{
-            add(mockEmail("johndoe@apache.org", "John Doe"));
-            add(mockEmail("alice@apache.org", "Alice"));
-            add(mockEmail("bob@apache.org", "Bob"));
-            add(mockEmail("charlie@apache.org", "Charlie"));
-            add(mockEmail("daniel@apache.org", "Daniel"));
-            add(mockEmail("johndoe@apache.org", "John Doe"));
-            add(mockEmail("jhoh228@googlemail.com.INVALID", "Jörg Hoh"));
-        }};
+        List<Email> thread = new ArrayList<>() {
+            {
+                add(mockEmail("johndoe@apache.org", "John Doe"));
+                add(mockEmail("alice@apache.org", "Alice"));
+                add(mockEmail("bob@apache.org", "Bob"));
+                add(mockEmail("charlie@apache.org", "Charlie"));
+                add(mockEmail("daniel@apache.org", "Daniel"));
+                add(mockEmail("johndoe@apache.org", "John Doe"));
+                add(mockEmail("jhoh228@googlemail.com.INVALID", "Jörg Hoh"));
+            }
+        };
         prepareExecution(mock(Mailer.class), thread);
         TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
         ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
@@ -102,30 +103,27 @@ public class TallyVotesCommandTest {
         Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
         Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference =
-                osgiContext.bundleContext().getServiceReference(Command.class.getName());
+        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
         Command command = (Command) osgiContext.bundleContext().getService(reference);
-        assertEquals(CommandLine.ExitCode.OK, (int)command.call());
-        verify(logger).info(
-                "From: John Doe <jo...@apache.org>\n" +
-                "To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                "Date: Thu, 1 Jan 1970 01:00:00 +0100\n" +
-                "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n" +
-                "\n" +
-                "Hi,\n" +
-                "\n" +
-                "The vote has passed with the following result:\n" +
-                "\n" +
-                "+1 (binding): Alice, Bob, Charlie, John Doe, Joerg Hoh\n" +
-                "+1 (non-binding): Daniel\n" +
-                "\n" +
-                "I will copy this release to the Sling dist directory and\n" +
-                "promote the artifacts to the central Maven repository.\n" +
-                "\n" +
-                "Regards,\n" +
-                "John Doe\n"
-        );
+        assertEquals(CommandLine.ExitCode.OK, (int) command.call());
+        verify(logger)
+                .info("From: John Doe <jo...@apache.org>\n" + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Date: Thu, 1 Jan 1970 01:00:00 +0100\n"
+                        + "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n"
+                        + "\n"
+                        + "Hi,\n"
+                        + "\n"
+                        + "The vote has passed with the following result:\n"
+                        + "\n"
+                        + "+1 (binding): Alice, Bob, Charlie, John Doe, Joerg Hoh\n"
+                        + "+1 (non-binding): Daniel\n"
+                        + "\n"
+                        + "I will copy this release to the Sling dist directory and\n"
+                        + "promote the artifacts to the central Maven repository.\n"
+                        + "\n"
+                        + "Regards,\n"
+                        + "John Doe\n");
     }
 
     @Test
@@ -134,12 +132,14 @@ public class TallyVotesCommandTest {
         mockStatic(LoggerFactory.class);
         Logger logger = mock(Logger.class);
         when(LoggerFactory.getLogger(TallyVotesCommand.class)).thenReturn(logger);
-        List<Email> thread = new ArrayList<>(){{
-            add(mockEmail("johndoe@apache.org", "John Doe"));
-            add(mockEmail("alice@apache.org", "Alice"));
-            add(mockEmail("bob@apache.org", "Bob"));
-            add(mockEmail("daniel@apache.org", "Daniel"));
-        }};
+        List<Email> thread = new ArrayList<>() {
+            {
+                add(mockEmail("johndoe@apache.org", "John Doe"));
+                add(mockEmail("alice@apache.org", "Alice"));
+                add(mockEmail("bob@apache.org", "Bob"));
+                add(mockEmail("daniel@apache.org", "Daniel"));
+            }
+        };
         prepareExecution(mock(Mailer.class), thread);
         TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
         ReusableCLIOptions reusableCLIOptions = mock(ReusableCLIOptions.class);
@@ -147,27 +147,24 @@ public class TallyVotesCommandTest {
         Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
         Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference =
-                osgiContext.bundleContext().getServiceReference(Command.class.getName());
+        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
         Command command = (Command) osgiContext.bundleContext().getService(reference);
-        assertEquals(CommandLine.ExitCode.USAGE, (int)command.call());
-        verify(logger).info(
-                "Release {} does not have at least 3 binding votes.",
-                "Apache Sling CLI Test 1.0.0"
-        );
-
+        assertEquals(CommandLine.ExitCode.USAGE, (int) command.call());
+        verify(logger).info("Release {} does not have at least 3 binding votes.", "Apache Sling CLI Test 1.0.0");
     }
 
     @Test
     public void testAuto() throws Exception {
-        List<Email> thread = new ArrayList<>(){{
-            add(mockEmail("johndoe@apache.org", "John Doe"));
-            add(mockEmail("alice@apache.org", "Alice"));
-            add(mockEmail("bob@apache.org", "Bob"));
-            add(mockEmail("charlie@apache.org", "Charlie"));
-            add(mockEmail("daniel@apache.org", "Daniel"));
-            add(mockEmail("johndoe@apache.org", "John Doe"));
-        }};
+        List<Email> thread = new ArrayList<>() {
+            {
+                add(mockEmail("johndoe@apache.org", "John Doe"));
+                add(mockEmail("alice@apache.org", "Alice"));
+                add(mockEmail("bob@apache.org", "Bob"));
+                add(mockEmail("charlie@apache.org", "Charlie"));
+                add(mockEmail("daniel@apache.org", "Daniel"));
+                add(mockEmail("johndoe@apache.org", "John Doe"));
+            }
+        };
         Mailer mailer = mock(Mailer.class);
         prepareExecution(mailer, thread);
         TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
@@ -176,30 +173,27 @@ public class TallyVotesCommandTest {
         Whitebox.setInternalState(tallyVotesCommand, "repositoryId", 123);
         Whitebox.setInternalState(tallyVotesCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(tallyVotesCommand);
-        ServiceReference<?> reference =
-                osgiContext.bundleContext().getServiceReference(Command.class.getName());
+        ServiceReference<?> reference = osgiContext.bundleContext().getServiceReference(Command.class.getName());
         Command command = (Command) osgiContext.bundleContext().getService(reference);
-        assertEquals(CommandLine.ExitCode.OK, (int)command.call());
-        verify(mailer).send(
-                "From: John Doe <jo...@apache.org>\n" +
-                        "To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                        "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n" +
-                        "Date: Thu, 1 Jan 1970 01:00:00 +0100\n" +
-                        "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n" +
-                        "\n" +
-                        "Hi,\n" +
-                        "\n" +
-                        "The vote has passed with the following result:\n" +
-                        "\n" +
-                        "+1 (binding): Alice, Bob, Charlie, John Doe\n" +
-                        "+1 (non-binding): Daniel\n" +
-                        "\n" +
-                        "I will copy this release to the Sling dist directory and\n" +
-                        "promote the artifacts to the central Maven repository.\n" +
-                        "\n" +
-                        "Regards,\n" +
-                        "John Doe\n"
-        );
+        assertEquals(CommandLine.ExitCode.OK, (int) command.call());
+        verify(mailer)
+                .send("From: John Doe <jo...@apache.org>\n" + "To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Reply-To: \"Sling Developers List\" <de...@sling.apache.org>\n"
+                        + "Date: Thu, 1 Jan 1970 01:00:00 +0100\n"
+                        + "Subject: [RESULT] [VOTE] Release Apache Sling CLI Test 1.0.0\n"
+                        + "\n"
+                        + "Hi,\n"
+                        + "\n"
+                        + "The vote has passed with the following result:\n"
+                        + "\n"
+                        + "+1 (binding): Alice, Bob, Charlie, John Doe\n"
+                        + "+1 (non-binding): Daniel\n"
+                        + "\n"
+                        + "I will copy this release to the Sling dist directory and\n"
+                        + "promote the artifacts to the central Maven repository.\n"
+                        + "\n"
+                        + "Regards,\n"
+                        + "John Doe\n");
     }
 
     private Email mockEmail(String address, String name) throws Exception {
@@ -214,14 +208,16 @@ public class TallyVotesCommandTest {
         when(credentialsService.getAsfCredentials()).thenReturn(new Credentials("johndoe", "secret"));
 
         MembersFinder membersFinder = spy(new MembersFinder());
-        Set<Member> members = new HashSet<>(){{
-            add(new Member("johndoe", "John Doe", true));
-            add(new Member("alice", "Alice", true));
-            add(new Member("bob", "Bob", true));
-            add(new Member("charlie", "Charlie", true));
-            add(new Member("daniel", "Daniel", false));
-            add(new Member("joerghoh", "Joerg Hoh", true));
-        }};
+        Set<Member> members = new HashSet<>() {
+            {
+                add(new Member("johndoe", "John Doe", true));
+                add(new Member("alice", "Alice", true));
+                add(new Member("bob", "Bob", true));
+                add(new Member("charlie", "Charlie", true));
+                add(new Member("daniel", "Daniel", false));
+                add(new Member("joerghoh", "Joerg Hoh", true));
+            }
+        };
         Whitebox.setInternalState(membersFinder, "members", members);
         Whitebox.setInternalState(membersFinder, "lastCheck", System.currentTimeMillis());
 
@@ -232,7 +228,6 @@ public class TallyVotesCommandTest {
         Release release = Release.fromString("Apache Sling CLI Test 1.0.0").get(0);
         when(repositoryService.getReleases(stagingRepository)).thenReturn(Set.of(release));
 
-
         VoteThreadFinder voteThreadFinder = mock(VoteThreadFinder.class);
         when(voteThreadFinder.findVoteThread("CLI Test 1.0.0")).thenReturn(thread);
 
diff --git a/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
index d8f037e..430bfd0 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/UpdateReporterCommandTest.java
@@ -1,21 +1,21 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.sling.cli.impl.release;
 
 import java.io.IOException;
@@ -99,9 +99,10 @@ public class UpdateReporterCommandTest {
         Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(updateReporterCommand);
         Command updateReporter = osgiContext.getService(Command.class);
-        assertTrue("Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
+        assertTrue(
+                "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
                 updateReporter instanceof UpdateReporterCommand);
-        assertEquals(0, (int)updateReporter.call());
+        assertEquals(0, (int) updateReporter.call());
         verify(logger).info("The following {} would be added to the Apache Reporter System:", "releases");
         verify(logger).info("  - {}", "Apache Sling CLI 1");
         verify(logger).info("  - {}", "Apache Sling CLI 2");
@@ -118,7 +119,8 @@ public class UpdateReporterCommandTest {
         Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(updateReporterCommand);
         Command updateReporter = osgiContext.getService(Command.class);
-        assertTrue("Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
+        assertTrue(
+                "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
                 updateReporter instanceof UpdateReporterCommand);
         CloseableHttpResponse response = mock(CloseableHttpResponse.class);
         StatusLine statusLine = mock(StatusLine.class);
@@ -129,7 +131,7 @@ public class UpdateReporterCommandTest {
         when(response.getStatusLine()).thenReturn(statusLine);
         when(statusLine.getStatusCode()).thenReturn(200);
         when(client.execute(any())).thenReturn(response);
-        assertEquals(0, (int)updateReporter.call());
+        assertEquals(0, (int) updateReporter.call());
         verify(client, times(2)).execute(any());
     }
 
@@ -142,16 +144,15 @@ public class UpdateReporterCommandTest {
         Whitebox.setInternalState(updateReporterCommand, "reusableCLIOptions", reusableCLIOptions);
         osgiContext.registerInjectActivateService(updateReporterCommand);
         Command updateReporter = osgiContext.getService(Command.class);
-        assertTrue("Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
+        assertTrue(
+                "Expected to retrieve the UpdateReporterCommand from the mocked OSGi environment.",
                 updateReporter instanceof UpdateReporterCommand);
         CloseableHttpResponse response = mock(CloseableHttpResponse.class);
         StatusLine statusLine = mock(StatusLine.class);
         when(response.getStatusLine()).thenReturn(statusLine);
         when(statusLine.getStatusCode()).thenReturn(200);
         when(client.execute(any())).thenReturn(response);
-        assertEquals(0, (int)updateReporter.call());
+        assertEquals(0, (int) updateReporter.call());
         verify(client, times(2)).execute(any());
     }
-
-
 }