修复initializeIntelliJPlugin超时问题

每次在 Run/Build 插件的时候,initializeIntelliJPlugin task要等待时间很长的事件才会进行下一步。

在开发插件时候,常用的是 Run / Debug / Build 这几个gradle task,但是总是卡在一个名为 initializeIntelliJPlugin task很长时间。

定位问题

这里是 InitializeIntelliJPluginTask.kt 这个文件的源码

InitializeIntelliJPluginTask.kt
1
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
2
3
package org.jetbrains.intellij.tasks
4
5
import org.gradle.api.DefaultTask
6
import org.gradle.api.provider.Property
7
import org.gradle.api.tasks.Internal
8
import org.gradle.api.tasks.TaskAction
9
import org.gradle.api.tasks.UntrackedTask
10
import org.jetbrains.intellij.*
11
import org.jetbrains.intellij.IntelliJPluginConstants.PLUGIN_GROUP_NAME
12
import org.jetbrains.intellij.utils.LatestVersionResolver
13
14
@UntrackedTask(because = "Should always be run to initialize the plugin")
15
abstract class InitializeIntelliJPluginTask : DefaultTask() {
16
12 collapsed lines
17
@get:Internal
18
abstract val offline: Property<Boolean>
19
20
@get:Internal
21
abstract val selfUpdateCheck: Property<Boolean>
22
23
init {
24
group = PLUGIN_GROUP_NAME
25
description = "Initializes the Gradle IntelliJ Plugin"
26
}
27
28
private val context = logCategory()
29
30
@TaskAction
31
fun initialize() {
32
checkPluginVersion()
33
}
34
17 collapsed lines
35
private fun checkPluginVersion() {
36
if (!selfUpdateCheck.get() || offline.get()) {
37
return
38
}
39
40
try {
41
val version = getCurrentPluginVersion()
42
?.let(Version::parse)
43
.or { Version() }
44
val latestVersion = LatestVersionResolver.fromGitHub(IntelliJPluginConstants.PLUGIN_NAME, IntelliJPluginConstants.GITHUB_REPOSITORY)
45
if (version < Version.parse(latestVersion)) {
46
warn(context, "${IntelliJPluginConstants.PLUGIN_NAME} is outdated: $version. Update `${IntelliJPluginConstants.PLUGIN_ID}` to: $latestVersion")
47
}
48
} catch (e: Exception) {
49
error(context, e.message.orEmpty(), e)
50
}
51
}
52
}

发现它主要做了一件事情: checkPluginVersion(),那么推测可能是因为网络链接导致的。换言之,检查的时候如果连接到服务器很慢,有可能会出现这个问题。

解决问题

checkPluginVersion() 这个方法的开头,有个判断条件。只要把 selfUpdateCheck 设置为 false 或者 offline 设置为 true。就可以避免它去检查。现在问题解决起来很方便了。 只要满足以上条件之一即可。

在 build.gradle.kts 中,新增下面的代码即可解决该问题。

1
tasks {
2
...
3
initializeIntelliJPlugin {
4
selfUpdateCheck.set(false)
5
}
6
...
7
}

Categories : IntelliJ Plugin