diff --git a/src/main/kotlin/de/marcphilipp/gradle/nexus/InitializeNexusStagingRepository.kt b/src/main/kotlin/de/marcphilipp/gradle/nexus/InitializeNexusStagingRepository.kt index 9d82c9d..9decb86 100644 --- a/src/main/kotlin/de/marcphilipp/gradle/nexus/InitializeNexusStagingRepository.kt +++ b/src/main/kotlin/de/marcphilipp/gradle/nexus/InitializeNexusStagingRepository.kt @@ -60,9 +60,19 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository @get:Input val repositoryName: Property = objects.property() + /** + * @see okhttp3.OkHttpClient.Builder.readTimeout + * @see okhttp3.OkHttpClient.Builder.writeTimeout + */ @get:Internal val clientTimeout: Property = objects.property() + /** + * @see okhttp3.OkHttpClient.Builder.connectTimeout + */ + @get:Internal + val connectTimeout: Property = objects.property() + init { serverUrl.set(repository.nexusUrl) username.set(repository.username) @@ -71,6 +81,7 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository stagingProfileId.set(repository.stagingProfileId) repositoryName.set(repository.name) clientTimeout.set(extension.clientTimeout) + connectTimeout.set(extension.connectTimeout) this.onlyIf { extension.useStaging.getOrElse(false) } } @@ -82,7 +93,7 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository internal fun createStagingRepo(): URI { return serverUrlToStagingRepoUrl.computeIfAbsent(serverUrl.get()) { serverUrl -> - val client = NexusClient(serverUrl, username.orNull, password.orNull, clientTimeout.getOrElse(Duration.ZERO)) + val client = NexusClient(serverUrl, username.orNull, password.orNull, clientTimeout.orNull, connectTimeout.orNull) val stagingProfileId = determineStagingProfileId(client) logger.info("Creating staging repository for stagingProfileId '{}'", stagingProfileId) val stagingRepositoryId = client.createStagingRepository(stagingProfileId) diff --git a/src/main/kotlin/de/marcphilipp/gradle/nexus/NexusPublishExtension.kt b/src/main/kotlin/de/marcphilipp/gradle/nexus/NexusPublishExtension.kt index a4c7a8c..4d56a1c 100644 --- a/src/main/kotlin/de/marcphilipp/gradle/nexus/NexusPublishExtension.kt +++ b/src/main/kotlin/de/marcphilipp/gradle/nexus/NexusPublishExtension.kt @@ -40,10 +40,21 @@ open class NexusPublishExtension(project: Project) { set(project.provider { project.group.toString() }) } + /** + * @see okhttp3.OkHttpClient.Builder.readTimeout + * @see okhttp3.OkHttpClient.Builder.writeTimeout + */ val clientTimeout: Property = project.objects.property().apply { set(Duration.ofMinutes(1)) } + /** + * @see okhttp3.OkHttpClient.Builder.connectTimeout + */ + val connectTimeout: Property = project.objects.property().apply { + set(Duration.ofMinutes(1)) + } + val repositories: NexusRepositoryContainer = DefaultNexusRepositoryContainer(project.container(NexusRepository::class) { name -> project.objects.newInstance(NexusRepository::class, name, project) }) diff --git a/src/main/kotlin/de/marcphilipp/gradle/nexus/internal/NexusClient.kt b/src/main/kotlin/de/marcphilipp/gradle/nexus/internal/NexusClient.kt index 2f3e351..32c80a0 100644 --- a/src/main/kotlin/de/marcphilipp/gradle/nexus/internal/NexusClient.kt +++ b/src/main/kotlin/de/marcphilipp/gradle/nexus/internal/NexusClient.kt @@ -32,16 +32,20 @@ import java.io.IOException import java.io.UncheckedIOException import java.net.URI import java.time.Duration -import java.util.concurrent.TimeUnit -class NexusClient(private val baseUrl: URI, username: String?, password: String?, timeout: Duration) { +class NexusClient(private val baseUrl: URI, username: String?, password: String?, timeout: Duration?, connectTimeout: Duration?) { private val api: NexusApi init { val httpClientBuilder = OkHttpClient.Builder() - .connectTimeout(1, TimeUnit.MINUTES) - .readTimeout(timeout.toMillis(), TimeUnit.MILLISECONDS) - .writeTimeout(timeout.toMillis(), TimeUnit.MILLISECONDS) + if (timeout != null) { + httpClientBuilder + .readTimeout(timeout) + .writeTimeout(timeout) + } + if (connectTimeout != null) { + httpClientBuilder.connectTimeout(connectTimeout) + } if (username != null || password != null) { val credentials = Credentials.basic(username ?: "", password ?: "") httpClientBuilder