code: public void installOrUpdateScanner(File installDirectory) throws BlackDuckIntegrationException {
          File scannerExpansionDirectory = new File(installDirectory, ScannerZipInstaller.BLACK_DUCK_SIGNATURE_SCANNER_INSTALL_DIRECTORY);
          scannerExpansionDirectory.mkdirs();
  
          File versionFile = null;
          try {
              versionFile = retrieveVersionFile(scannerExpansionDirectory);
          } catch (IOException e) {
              throw new BlackDuckIntegrationException("Trying to install the scanner but could not create the version file: " + e.getMessage());
          }
  
          String downloadUrl = getDownloadUrl();
          try {
              downloadIfModified(scannerExpansionDirectory, versionFile, downloadUrl);
          } catch (Exception e) {
              throw new BlackDuckIntegrationException("The Black Duck Signature Scanner could not be downloaded successfully: " + e.getMessage());
          }
  
          logger.info("The Black Duck Signature Scanner downloaded/found successfully: " + installDirectory.getAbsolutePath());
      }
docs: The Black Duck Signature Scanner will be download if it has not
  previously been downloaded or if it has been updated on the server. The
  absolute path to the install location will be returned if it was
  downloaded or found successfully, otherwise an Optional.empty will be
  returned and the log will contain details concerning the failure.