原因:Java,lang.ClassNotFoundException:org.jetbrains.idea.maven.project.MavenProjectsManager PluginClassLoader

wlwcrazw  于 2023-04-29  发布在  Java
关注(0)|答案(1)|浏览(276)

我正在开发一个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
我找过一些相同的开源插件代码,我们的代码很相似,和谷歌这么多次,都没有结果。拜托了。

相关问题