ClassPath (ProgressLoggerFactory progressLoggerFactory, InternalBuildProgressListener progressListener, ConnectionParameters connectionParameters, BuildCancellationToken cancellationToken) { if (installedDistribution == null) { final DistributionInstaller installer = new DistributionInstaller(progressLoggerFactory, progressListener, clock); File installDir; try { cancellationToken.addCallback(() -> installer.cancel()); installDir = installer.install(determineRealUserHomeDir(connectionParameters), determineRootDir(connectionParameters), wrapperConfiguration, determineSystemProperties(connectionParameters)); } catch (CancellationException e) { throw new BuildCancelledException( String.format("Distribution download cancelled. Using distribution from '%s'.", wrapperConfiguration.getDistribution()), e); } catch (FileNotFoundException e) { throw new IllegalArgumentException(String.format("The specified %s does not exist.", getDisplayName()), e); } catch (Exception e) { throw new GradleConnectionException( String.format("Could not install Gradle distribution from '%s'.", wrapperConfiguration.getDistribution()), e); } installedDistribution = new InstalledDistribution(installDir, getDisplayName(), getDisplayName()); } return installedDistribution.getToolingImplementationClasspath(progressLoggerFactory, progressListener, connectionParameters, cancellationToken); }