Bootstrap

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程

1. 创建 Maven 项目

1.1 使用 IntelliJ 创建 Maven 项目
  1. 打开 IntelliJ IDEA,点击 File > New > Project
  2. 选择 Maven,填写项目名称和 GroupId,例如:
    • GroupId: com.example
    • ArtifactId: my-intellij-plugin
  3. 完成后点击 Finish,生成一个基本的 Maven 项目。

2. 配置 Maven 项目

2.1 修改 pom.xml

添加 IntelliJ Platform 的依赖和插件打包配置:

示例 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-intellij-plugin</artifactId>
    <version>1.0.0</version>

    <properties>
        <!-- IntelliJ Platform 版本 -->
        <idea.version>2023.1</idea.version>
        <java.version>11</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- IntelliJ Platform SDK -->
        <dependency>
            <groupId>com.jetbrains.intellij.platform</groupId>
            <artifactId>platform-api</artifactId>
            <version>${idea.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.jetbrains.intellij.platform</groupId>
            <artifactId>platform-impl</artifactId>
            <version>${idea.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Maven 编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <!-- IntelliJ IDEA Plugin 插件 -->
            <plugin>
                <groupId>org.jetbrains.intellij</groupId>
                <artifactId>intellij-maven-plugin</artifactId>
                <version>1.14.0</version>
                <configuration>
                    <!-- 定义插件的开发平台 -->
                    <ideaVersion>${idea.version}</ideaVersion>
                    <downloadSources>true</downloadSources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3. 插件描述文件

src/main/resources/META-INF/ 下创建 plugin.xml,用于描述插件的核心信息和功能。

示例 plugin.xml
<idea-plugin>
    <id>com.example.myplugin</id>
    <name>My IntelliJ Plugin</name>
    <version>1.0.0</version>
    <vendor email="[email protected]" url="https://example.com">Your Name</vendor>

    <!-- 插件扩展点 -->
    <extensions defaultExtensionNs="com.intellij">
        <actions>
            <action id="MyPlugin.Action" class="com.example.actions.MyAction" text="Generate Code"
                    description="Generate code based on table script">
                <add-to-group group-id="EditorPopupMenu" anchor="last"/>
            </action>
        </actions>
    </extensions>
</idea-plugin>

4. 实现插件功能

4.1 插件主逻辑

src/main/java/com/example/actions/ 下创建 MyAction.java,实现右键菜单触发的动作。

package com.example.actions;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;

public class MyAction extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        // 获取当前项目
        Project project = e.getProject();
        if (project == null) {
            Messages.showErrorDialog("No project found", "Error");
            return;
        }

        // 示例:生成的代码
        String generatedCode = """
            public class User {
                private int id;
                private String name;
                private String email;

                public int getId() { return id; }
                public void setId(int id) { this.id = id; }

                public String getName() { return name; }
                public void setName(String name) { this.name = name; }

                public String getEmail() { return email; }
                public void setEmail(String email) { this.email = email; }
            }
        """;

        // 显示结果
        Messages.showInfoMessage(project, "Generated Code:\n" + generatedCode, "Code Generation");
    }
}

5. 打包和运行插件

5.1 打包插件

运行以下 Maven 命令,将插件打包为 .zip 文件:

mvn package

生成的插件包会在 target/ 目录下,文件名如 my-intellij-plugin-1.0.0.zip

5.2 在 IntelliJ 中运行和测试
  1. 在 IntelliJ IDEA 中打开插件项目。
  2. 点击 Run 或执行以下命令:
    mvn intellij:run
    
    这将启动一个带有插件的新 IntelliJ 实例,用于测试插件功能。
5.3 手动安装插件
  1. 将打包的 .zip 文件上传到 IntelliJ:
    • 菜单:File > Settings > Plugins > Install Plugin from Disk
  2. 重启 IntelliJ,测试插件。

6. 高阶功能扩展

6.1 动态调用 Python 脚本

可以在插件中调用 Python 服务完成复杂任务,例如代码生成。

示例:调用 Python REST 服务

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class PythonIntegration {
    public static String invokePythonAPI(String payload) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("http://localhost:5000/generate"))
            .POST(HttpRequest.BodyPublishers.ofString(payload))
            .header("Content-Type", "application/json")
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

6.2 与项目文件交互

让插件直接修改项目中的代码文件。

示例:写入代码到文件

import com.intellij.openapi.vfs.VirtualFile;

public class FileWriter {
    public static void writeToFile(VirtualFile file, String content) throws Exception {
        file.setBinaryContent(content.getBytes());
    }
}

7. 发布插件

7.1 打包插件

运行 mvn package,生成 .zip 文件。

7.2 发布到 JetBrains 插件市场
  1. 登录 JetBrains Plugin Repository
  2. 上传 .zip 文件,并填写插件描述。

总结

通过 Maven 开发 IntelliJ 插件,与 Gradle 类似,只需修改 pom.xml 并添加 IntelliJ Platform 的依赖。Maven 更适合习惯于使用 Maven 的开发者,功能上并无限制。

;