code: protected List<MavenArtifact> fetchMavenArtifacts(Dependency dependency) throws IOException {
          IOException lastException = null;
          long sleepingTimeBetweenRetriesInMillis = BASE_RETRY_WAIT;
          int triesLeft = numberOfRetries;
          while (triesLeft-- > 0) {
              try {
                  return searcher.searchSha1(dependency.getSha1sum());
              } catch (FileNotFoundException fnfe) {
                  // retry does not make sense, just throw the exception
                  throw fnfe;
              } catch (IOException ioe) {
                  LOGGER.debug("Could not connect to Central search (tries left: {}): {}",
                          triesLeft, ioe.getMessage());
                  lastException = ioe;
  
                  if (triesLeft > 0) {
                      try {
                          Thread.sleep(sleepingTimeBetweenRetriesInMillis);
                          sleepingTimeBetweenRetriesInMillis *= 2;
                      } catch (InterruptedException e) {
                          Thread.currentThread().interrupt();
                      }
                  }
              }
          }
  
          final String message = "Finally failed connecting to Central search."
                  + " Giving up after " + numberOfRetries + " tries.";
          throw new IOException(message, lastException);
      }
docs: Downloads the corresponding list of MavenArtifacts of the given
  dependency from MavenCentral.
  <p>
  As the connection to MavenCentral is known to be unreliable, we implement
  a simple retry logic in order to compensate for 99% of the issues.
  
  @param dependency the dependency to analyze
  @return the downloaded list of MavenArtifacts
  @throws FileNotFoundException if the specified artifact is not found
  @throws IOException if connecting to MavenCentral finally failed