1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-14 23:20:49 +08:00

[intellij] 从 Maven Central 获取 kotlin jvm 版本 ()

* get kotlin version from Gradle Plugins

* add `kotlinVersion` to project module

* add kotlin version cell to wizard initial step

* get dependency `kotlin-stlib-*` version from maven

* rename `KotlinJvmVersion` to `KotlinStdlibVersion`

* `KotlinJvmVersion.kt` -> `KotlinStdlibVersion.kt`
This commit is contained in:
ヒューマンワーキング 2022-09-23 22:02:43 +08:00 committed by GitHub
parent d1273401f6
commit 8cb8a71f16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 137 additions and 3 deletions

View File

@ -0,0 +1,118 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.console.intellij.wizard
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import java.io.IOException
typealias KotlinStdlibVersion = String
object KotlinStdlibVersionFetcher {
@Throws(IOException::class)
fun getKotlinStdlibVersion(miraiVersion: MiraiVersion): KotlinStdlibVersion {
fun download(url: String): Document {
return Jsoup.connect(url)
.followRedirects(true)
.ignoreContentType(true)
.ignoreHttpErrors(true)
.get()
}
val path = "net/mamoe/mirai-core/$miraiVersion/mirai-core-$miraiVersion.pom"
return kotlin.runCatching {
download("https://maven.aliyun.com/repository/central/$path")
}.recoverCatching {
download("https://repo.maven.apache.org/maven2/$path")
}.map { document ->
val xml = document.toString()
Regex("""<artifactid>\s*kotlin-stdlib-[A-Za-z0-9-]+\s*</artifactid>\s*<version>\s*(.*?)\s*</version>""")
.findAll(xml)
.mapNotNull {
it.groupValues.getOrNull(1)
}
.firstOrNull() ?: Versions.KOTLIN.text
}.getOrThrow()
}
}
/*
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- This module was also published with a richer model, Gradle metadata, -->
<!-- which should be used instead. Do not delete the following line which -->
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
<!-- that they should prefer consuming it instead. -->
<!-- do_not_remove: published-with-gradle-metadata -->
<modelVersion>4.0.0</modelVersion>
<groupId>net.mamoe</groupId>
<artifactId>mirai-core</artifactId>
<version>2.12.2</version>
<packaging>pom</packaging>
<licenses>
<license>
<name>GNU AGPLv3</name>
<url>https://github.com/mamoe/mirai/blob/master/LICENSE</url>
</license>
</licenses>
<developers>
<developer>
<id>mamoe</id>
<name>Mamoe Technologies</name>
<email>support@mamoe.net</email>
</developer>
</developers>
<scm>
<connection>scm:https://github.com/mamoe/mirai.git</connection>
<developerConnection>scm:git://github.com/mamoe/mirai.git</developerConnection>
<url>https://github.com/mamoe/mirai</url>
</scm>
<dependencies>
<dependency>
<groupId>net.mamoe</groupId>
<artifactId>mirai-core-api</artifactId>
<version>2.12.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-core-jvm</artifactId>
<version>1.3.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-json-jvm</artifactId>
<version>1.3.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core-jvm</artifactId>
<version>1.6.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.6.21</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<description>Mirai Protocol implementation for QQ Android</description>
<name>mirai-core</name>
<url>https://github.com/mamoe/mirai</url>
</project>
*/

View File

@ -77,7 +77,7 @@ class MiraiModuleBuilder : StarterModuleBuilder() {
val projectCoordinates = projectCoordinates
val pluginCoordinates = pluginCoordinates
return mapOf<String, Any>(
"KOTLIN_VERSION" to KotlinVersion.CURRENT.toString(),
"KOTLIN_VERSION" to kotlinVersion,
"MIRAI_VERSION" to miraiVersion,
"GROUP_ID" to projectCoordinates.groupId,
"VERSION" to projectCoordinates.version,

View File

@ -34,6 +34,7 @@ class MiraiProjectModel(
val projectCoordinates: ProjectCoordinates,
val pluginCoordinates: PluginCoordinates,
val miraiVersion: String,
val kotlinVersion: String,
val buildSystemType: BuildSystemType,
val languageType: LanguageType,

View File

@ -26,6 +26,7 @@ import com.intellij.ui.dsl.builder.*
import net.mamoe.mirai.console.intellij.wizard.MiraiProjectWizardBundle.message
import org.jetbrains.concurrency.Promise
import org.jetbrains.concurrency.runAsync
import org.jetbrains.kotlin.tools.projectWizard.Versions
private val log = logger<MiraiProjectWizardInitialStep>()
@ -49,6 +50,8 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
var miraiVersionKind by miraiVersionKindProperty
var miraiVersion by miraiVersionProperty
var kotlinStdlibVersion = Versions.KOTLIN.text
private lateinit var miraiVersionCell: Cell<ComboBox<String>>
override fun addFieldsAfter(layout: Panel) {
@ -117,6 +120,18 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
.enabled(false)
.bindItem(miraiVersionProperty)
miraiVersionProperty.afterChange {
kotlinStdlibVersion = "Loading"
runAsync {
KotlinStdlibVersionFetcher.getKotlinStdlibVersion(miraiVersion)
}.onError {
log.error(it)
kotlinStdlibVersion = Versions.KOTLIN.text
}.onProcessed {
kotlinStdlibVersion = it
}
}
miraiVersionKindProperty.afterChange {
if (!miraiVersionCell.component.isEnabled) return@afterChange
@ -156,6 +171,7 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
dependsOn = pluginDependencies.trim()
),
miraiVersion = miraiVersion,
kotlinVersion = kotlinStdlibVersion,
buildSystemType = when (val projectType = projectTypeProperty.get()) {
MiraiModuleBuilder.GRADLE_KTS_PROJECT -> BuildSystemType.GradleKt
MiraiModuleBuilder.GRADLE_GROOVY_PROJECT -> BuildSystemType.GradleGroovy
@ -171,7 +187,7 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
}
override fun validate(): Boolean {
if (miraiVersion == message("label.mirai.version.loading")) {
if (miraiVersion == message("label.mirai.version.loading") || kotlinStdlibVersion == "Loading") {
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder(
message("error.please.wait.for.mirai.version"),
@ -186,7 +202,6 @@ class MiraiProjectWizardInitialStep(contextProvider: StarterContextProvider) : S
)
return false
}
return super.validate()
}