探索 IDEA Plugin 插件开发技术案例

、案例开发

  1. 工程结构
    guide-idea-plugin-scaffolding
    ├── .gradle
    └── src
    ├── main
    │ └── java
    │ └── cn.bugstack.guide.idea.plugin
    │ ├── domain
    │ │ ├── model
    │ │ │ └── ProjectConfigVO.java
    │ │ └── service
    │ │ ├── impl
    │ │ │ └── ProjectGeneratorImpl.java
    │ │ ├── AbstractProjectGenerator.java
    │ │ ├── FreemarkerConfiguration.java
    │ │ └── IProjectGenerator.java
    │ ├── factory
    │ │ └── TemplateFactory.java
    │ ├── infrastructure
    │ │ ├── DataSetting.java
    │ │ ├── DataState.java
    │ │ ├── ICONS.java
    │ │ └── MsgBundle.java
    │ ├── module
    │ │ ├── DDDModuleBuilder.java
    │ │ └── DDDModuleConfigStep.java
    │ └── ui
    │ ├── ProjectConfigUI.java
    │ └── ProjectConfigUI.form
    ├── resources
    │ ├── META-INF
    │ │ └── plugin.xml
    │ └── template
    │ ├── pom.ftl
    │ └── yml.ftl
    ├── build.gradle
    └── gradle.properties
    源码获取:#公众号:bugstack虫洞栈 回复:idea 即可下载全部 IDEA 插件开发源码

在此 IDEA 插件工程中,主要分为5块区域:

domain:领域层,提供创建 DDD 模板工程的服务,其实这部分主要使用的就是 freemarker
factory:工厂层,提供工程创建模板,这一层的作用就是我们在 IDEA 中创建新工程的时候,可以添加上我们自己的内容,也就是创建出我们定义好的 DDD 工程结构。
infrastructure:基础层,提供数据存放、图片加载、信息映射这些功能。
module:模块层,提供 DDD 模板工程的创建具体操作和步骤,也就是说我们创建工程的时候是一步步选择的,你可以按需添加自己的步骤页面,允许用户选择和添加自己需要的内容。比如你需要连库、选择表、添加工程所需要的技术栈等
ui:界面层,提供Swing 开发的 UI 界面,用于用户图形化选择和创建。
2. UI 工程配置窗体

public class ProjectConfigUI {

private JPanel mainPanel;
private JTextField groupIdField;
private JTextField artifactIdField;
private JTextField versionField;
private JTextField packageField;

}
使用 Swing UI Designer 创建一个配置工厂信息的 UI 窗体,通过这样的方式创建可以直接拖拽。
在这个 UI 窗体中我们主要需要;roupId、artifactId、version、package
3. 配置工程步骤创建
3.1 数据存放
cn.bugstack.guide.idea.plugin.infrastructure.DataSetting

@State(name = “DataSetting”,storages = @Storage(“plugin.xml”))
public class DataSetting implements PersistentStateComponent {

private DataState state = new DataState();

public static DataSetting getInstance() {
    return ServiceManager.getService(DataSetting.class);
}

@Nullable
@Override
public DataState getState() {
    return state;
}

@Override
public void loadState(@NotNull DataState state) {
    this.state = state;
}

 public ProjectConfigVO getProjectConfig(){
    return state.getProjectConfigVO();
 }

}
在基础层提供数据存放的服务,把创建工程的配置信息存放到服务中,这样比较方便设置和获取。
3.2 扩展步骤
cn.bugstack.guide.idea.plugin.module.DDDModuleConfigStep

public class DDDModuleConfigStep extends ModuleWizardStep {

private ProjectConfigUI projectConfigUI;

public DDDModuleConfigStep(ProjectConfigUI projectConfigUI) {
    this.projectConfigUI = projectConfigUI;
}

@Override
public JComponent getComponent() {
    return projectConfigUI.getComponent();
}

@Override
public boolean validate() throws ConfigurationException {
    // 获取配置信息,写入到 DataSetting
    ProjectConfigVO projectConfig = DataSetting.getInstance().getProjectConfig();
    projectConfig.set_groupId(projectConfigUI.getGroupIdField().getText());
    projectConfig.set_artifactId(projectConfigUI.getArtifactIdField().getText());
    projectConfig.set_version(projectConfigUI.getVersionField().getText());
    projectConfig.set_package(projectConfigUI.getPackageField().getText());

    return super.validate();
}

}
继承 ModuleWizardStep 开发一个自己需要的步骤,这个步骤就会出现到我们创建新的工程中。
同时在重写的 validate 方法中,把从工程配置 UI 窗体中获取到信息,写入到数据配置文件中。
3.3 配置步骤
cn.bugstack.guide.idea.plugin.module.DDDModuleBuilder

public class DDDModuleBuilder extends ModuleBuilder {

private IProjectGenerator projectGenerator = new ProjectGeneratorImpl();

@Override
public Icon getNodeIcon() {
    return ICONS.SPRING_BOOT;
}

/**
 * 重写 builderId 挂载自定义模板
 */
@Nullable
@Override
public String getBuilderId() {
    return getClass().getName();
}

@Override
public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) {

    // 添加工程配置步骤,可以自己定义需要的步骤,如果有多个可以依次添加
    DDDModuleConfigStep moduleConfigStep = new DDDModuleConfigStep(new ProjectConfigUI());

    return new ModuleWizardStep[]{moduleConfigStep};
}

}
亚马逊测评 www.yisuping.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值