From 0a5313e94a4b28868dc579cb7c1c39bfc708594f Mon Sep 17 00:00:00 2001 From: LamGC Date: Wed, 18 May 2022 15:40:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(extension):=20=E4=BF=AE=E5=A4=8D=20Maven=20?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E6=89=A9=E5=B1=95=E6=90=9C=E7=B4=A2=E5=99=A8?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BB=8E=E7=AC=AC=E4=B8=89=E6=96=B9=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E8=8E=B7=E5=8F=96=E6=89=A9=E5=B1=95=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 由于在加载仓库配置时, 未设置仓库 Id, 导致 Aether 将仓库排除, 进而导致无法通过第三方仓库获取插件. 改动后, 将在未配置仓库 Id 的情况下, 为其生成一个 Id 名称. --- scalabot-app/src/main/kotlin/AppConfigs.kt | 32 +++++++++++++++++-- .../src/main/kotlin/ExtensionFinders.kt | 14 +++++++- .../src/main/kotlin/util/Serializers.kt | 2 +- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/scalabot-app/src/main/kotlin/AppConfigs.kt b/scalabot-app/src/main/kotlin/AppConfigs.kt index 59b82a4..ad3796d 100644 --- a/scalabot-app/src/main/kotlin/AppConfigs.kt +++ b/scalabot-app/src/main/kotlin/AppConfigs.kt @@ -13,12 +13,14 @@ import org.eclipse.aether.artifact.Artifact import org.eclipse.aether.repository.Authentication import org.eclipse.aether.repository.Proxy import org.eclipse.aether.repository.RemoteRepository +import org.eclipse.aether.repository.RepositoryPolicy import org.telegram.telegrambots.bots.DefaultBotOptions import org.telegram.telegrambots.meta.ApiConstants import java.io.File import java.net.URL import java.nio.charset.StandardCharsets import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicInteger import kotlin.system.exitProcess private val log = KotlinLogging.logger { } @@ -100,6 +102,7 @@ internal data class MetricsConfig( * @property layout 仓库布局版本, Maven 2 及以上使用 `default`, Maven 1 使用 `legacy`. */ internal data class MavenRepositoryConfig( + val id: String? = null, val url: URL, val proxy: Proxy? = Proxy("http", "127.0.0.1", 1080), val layout: String = "default", @@ -108,12 +111,29 @@ internal data class MavenRepositoryConfig( ) { fun toRemoteRepository(proxyConfig: ProxyConfig): RemoteRepository { - val builder = RemoteRepository.Builder(null, checkRepositoryLayout(layout), url.toString()) + val builder = + RemoteRepository.Builder(id ?: createDefaultRepositoryId(), checkRepositoryLayout(layout), url.toString()) if (proxy != null) { builder.setProxy(proxy) } else if (proxyConfig.type == DefaultBotOptions.ProxyType.HTTP) { builder.setProxy(proxyConfig.toAetherProxy()) } + + builder.setReleasePolicy( + RepositoryPolicy( + true, + RepositoryPolicy.UPDATE_POLICY_NEVER, + RepositoryPolicy.CHECKSUM_POLICY_FAIL + ) + ) + builder.setSnapshotPolicy( + RepositoryPolicy( + true, + RepositoryPolicy.UPDATE_POLICY_ALWAYS, + RepositoryPolicy.CHECKSUM_POLICY_WARN + ) + ) + return builder.build() } @@ -125,6 +145,13 @@ internal data class MavenRepositoryConfig( } return type } + + private val repoNumber = AtomicInteger(1) + + fun createDefaultRepositoryId(): String { + return "Repository-${repoNumber.getAndIncrement()}" + } + } } @@ -180,7 +207,8 @@ internal enum class AppPaths( AppConfig( mavenRepositories = listOf( MavenRepositoryConfig( - URL(MavenRepositoryExtensionFinder.MAVEN_CENTRAL_URL) + id = "central", + url = URL(MavenRepositoryExtensionFinder.MAVEN_CENTRAL_URL) ) ) ), it diff --git a/scalabot-app/src/main/kotlin/ExtensionFinders.kt b/scalabot-app/src/main/kotlin/ExtensionFinders.kt index ee6221e..b161767 100644 --- a/scalabot-app/src/main/kotlin/ExtensionFinders.kt +++ b/scalabot-app/src/main/kotlin/ExtensionFinders.kt @@ -257,9 +257,21 @@ internal class MavenRepositoryExtensionFinder( } override fun findByArtifact(extensionArtifact: Artifact, extensionsPath: File): Set { + log.debug { + StringBuilder().apply { + append("构件 $extensionArtifact 将在以下仓库拉取: \n") + remoteRepositories.forEach { + append("\t- ${it}\n") + } + } + } val extensionArtifactResult = repositorySystem.resolveArtifact( repoSystemSession, - ArtifactRequest(extensionArtifact, remoteRepositories, null) + ArtifactRequest( + extensionArtifact, + repositorySystem.newResolutionRepositories(repoSystemSession, remoteRepositories), + null + ) ) val extResolvedArtifact = extensionArtifactResult.artifact if (!extensionArtifactResult.isResolved) { diff --git a/scalabot-app/src/main/kotlin/util/Serializers.kt b/scalabot-app/src/main/kotlin/util/Serializers.kt index c8c776e..f4a5698 100644 --- a/scalabot-app/src/main/kotlin/util/Serializers.kt +++ b/scalabot-app/src/main/kotlin/util/Serializers.kt @@ -155,7 +155,7 @@ internal object MavenRepositoryConfigSerializer ) } is JsonPrimitive -> { - MavenRepositoryConfig(URL(json.asString)) + MavenRepositoryConfig(url = URL(json.asString)) } else -> { throw JsonParseException("Unsupported Maven warehouse configuration type.")