mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-14 23:20:49 +08:00
[intellij] 从 Maven Central 获取 kotlin jvm 版本 (#2244)
* 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:
parent
d1273401f6
commit
8cb8a71f16
mirai-console/tools/intellij-plugin/src/wizard
@ -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>
|
||||
|
||||
*/
|
@ -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,
|
||||
|
@ -34,6 +34,7 @@ class MiraiProjectModel(
|
||||
val projectCoordinates: ProjectCoordinates,
|
||||
val pluginCoordinates: PluginCoordinates,
|
||||
val miraiVersion: String,
|
||||
val kotlinVersion: String,
|
||||
|
||||
val buildSystemType: BuildSystemType,
|
||||
val languageType: LanguageType,
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user