我正在开发一个IDEA插件,我写了一个动作类来获取MavenProject(org)。jetbrains.idea.maven.project.MavenProject)项目示例。代码如下:
package com.example.demo.actions;
import com.intellij.ide.IdeView;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
public class ProjectViewPopupMenuTestAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
IdeView ideView = e.getData(LangDataKeys.IDE_VIEW);
if (ideView == null) {
return;
}
PsiDirectory chooseDirectory = ideView.getOrChooseDirectory();
PsiFile psiFile = chooseDirectory.findFile("pom.xml");
VirtualFile virtualFile = psiFile.getVirtualFile();
MavenProject mavenProject = MavenProjectsManager.getInstance(e.getProject()).findProject(virtualFile);
System.out.println(mavenProject);
}
}
在plugin.xml中,我将ProjectViewPopupMenuTestAction添加到ProjectViewPopupMenu:
<actions>
<action id="pomProjectViewPopup" class="com.example.demo.actions.ProjectViewPopupMenuTestAction"
text="getPomDependency" description="ProjectViewPopupMenu">
<add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
</action>
</actions>
我需要maven插件,所以我在intellij块中添加了maven插件。这是我大楼。gradle.kts:
plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "1.7.20"
id("org.jetbrains.intellij") version "1.13.3"
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
intellij {
version.set("2022.2.4")
type.set("IC") // Target IDE Platform
plugins.set(listOf("maven"))
}
tasks {
// Set the JVM compatibility versions
withType<JavaCompile> {
sourceCompatibility = "11"
targetCompatibility = "11"
}
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.jvmTarget = "11"
}
patchPluginXml {
sinceBuild.set("222")
untilBuild.set("232.*")
}
signPlugin {
certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
privateKey.set(System.getenv("PRIVATE_KEY"))
password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
}
publishPlugin {
token.set(System.getenv("PUBLISH_TOKEN"))
}
}
问题:
当我调试代码时,它在运行时抛出ClassNotFoundException:
MavenProject mavenProject = MavenProjectsManager.getInstance(e.getProject()).findProject(virtualFile);
com.intellij.openapi.actionSystem.例如ActionUtil:336:
AccessToken ignore = SlowOperations.allowSlowOperations(SlowOperations.ACTION_PERFORM)
然后后藤345,抛出NoClassDefFoundError:enter image description here
Caused by: java.lang.ClassNotFoundException: org.jetbrains.idea.maven.project.MavenProjectsManager PluginClassLoader(plugin=PluginDescriptor(name=Demo, id=com.example.demo, descriptorPath=plugin.xml, path=~/java/IDEAPlugin/demo/build/idea-sandbox/plugins/demo, version=1.0-SNAPSHOT, package=null, isBundled=false), packagePrefix=null, instanceId=73, state=active)
但是我在断点[VirtualFile virtualFile = psiFile.getString();]并打开evaluate窗口执行剩下的代码:enter image description here
It works!!!
我真的很困惑,这个例外超过5天。拜托了。
我的环境:发展理念:IntelliJ IDEA 2023.1内部版本号IU Mac OS X
插件调试环境:2023-04-27 11:27:07,938 [ 63374]严重- #c.i.i.p.PluginManager - IntelliJ IDEA 2022。2.4构建编号IC-222。4459.24
2023-04-27 11:27:07,944 [ 63380]严重- #c.i.i.p.PluginManager - JDK:17.0.5; VM:OpenJDK 64位服务器虚拟机;供应商:JetBrains s.r.o.
2023-04-27 11:27:07,945 [ 63381]严重- #c.i. i. p. PluginManager -操作系统:Mac OS X
我找过一些相同的开源插件代码,我们的代码很相似,和谷歌这么多次,都没有结果。拜托了。
1条答案
按热度按时间wyyhbhjk1#
解决了!我错过了一个配置插件。xml https://intellij-support.jetbrains.com/hc/en-us/community/posts/11202130218898-Caused-by-java-lang-ClassNotFoundException-org-jetbrains-idea-maven-project-MavenProjectsManager-PluginClassLoader