java开发插件

java开发插件最近想要用 java 开发一个插件 参考 IntellijIdea 非 Maven 项目打 Jar 包 散包 依赖在外面 IDEA 导入 jar 包 前提 插件使用 idea 开发 插件项目选择 java 项目 导出为 jar 包作为插件使用 使用处采用 URLClassLoad 加载器加载 反射调用

大家好,我是讯享网,很高兴认识大家。

最近想要用java开发一个插件。

参考

前提

插件使用idea开发,插件项目选择java项目,导出为jar包作为插件使用。使用处采用URLClassLoader加载器加载,反射调用。

操作指南

  • 导入依赖的过程如下:

在这里插入图片描述
讯享网

在这里插入图片描述

在这里插入图片描述

  • 导jar设置过程如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 导出操作
    在这里插入图片描述
    在这里插入图片描述

一个简单的插件

  • 调用处
@Test public void test13() throws Exception { 
    File file = new File("E:\\javaWorkSpace\\simple-plugin\\out\\artifacts\\simple_plugin_jar\\simple-plugin.jar"); URL url = file.toURI().toURL(); URLClassLoader classLoader = new URLClassLoader(new URL[] { 
   url}); Class<?> gClass = classLoader.loadClass("com.simple.plugin.SimplePlugin"); gClass.getMethod("service").invoke(gClass.newInstance()); } 

讯享网
  • 插件
讯享网package com.simple.plugin; / * @description: * @author: zhangmy * @Version: 1.0 * @create: 2021-03-26 17:26 / public class SimplePlugin { 
    public SimplePlugin() { 
    System.out.println("SimplePlugin构造函数执行完毕!"); } public void service() { 
    System.out.println("SimplePlugin插件提供服务!"); } } 
  • 结果

在这里插入图片描述

开发插件时调用第三方jar

什么是第三方jar?除了jdk以外的依赖。如果不是第三方jar,可以直接import使用,比如import java.io.File等java官方提供的。

第三方jar

package com.hwp.plugin; / * @description: * @author: zhangmy * @Version: 1.0 * @create: 2021-03-26 16:47 / public class HwpPlugin { 
    public HwpPlugin() { 
    System.out.println("HwpPlugin构造函数执行完毕!"); } public void service() { 
    System.out.println("HwpPlugin提供了服务service!"); } } 

插件中采用ClassLoader加载第三方jar

  • 依赖:
    可以看到,没有要使用的HwpPlugin
    在这里插入图片描述
  • 插件代码:
讯享网package com.zmy.plugin; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; / * @description: * @author: zhangmy * @Version: 1.0 * @create: 2021-03-26 16:52 / public class ZmyPlugin { 
    public ZmyPlugin() { 
    System.out.println("ZmyPlugin构造函数执行完毕!"); } private static Class hwpPlugin = null; static { 
    //加载第三方jar,绝对路径,需要保证第三方jar的位置 File file = new File("E:\\javaWorkSpace\\hwp-plugin\\out\\artifacts\\hwp_plugin_jar\\hwp-plugin.jar"); try { 
    URLClassLoader loader = new URLClassLoader(new URL[] { 
   file.toURI().toURL()}); hwpPlugin = loader.loadClass("com.hwp.plugin.HwpPlugin"); System.out.println("static代码块中加载HwpPlugin.class完毕!"); } catch (MalformedURLException | ClassNotFoundException e) { 
    e.printStackTrace(); } } public void service () throws Exception { 
    System.out.println("zmy-plugin先调用hwp-plugin的功能!"); hwpPlugin.getMethod("service").invoke(hwpPlugin.newInstance()); System.out.println("zmy-plugin调用hwp-plugin的功能完毕了!"); System.out.println("ZmyPlugin提供了自己的功能!"); } } 
  • 打包的插件jar结构
    在这里插入图片描述
  • 结果:

在这里插入图片描述

  • 问题:

插件中采用添加依赖+import的方式使用第三方jar

  • 依赖:
    HwpPlugin被导入
    在这里插入图片描述
  • 插件代码:
package com.dpw.plugin; import com.hwp.plugin.HwpPlugin; / * @description: * @author: zhangmy * @Version: 1.0 * @create: 2021-03-26 17:07 / public class DpwPlugin { 
    public DpwPlugin() { 
    System.out.println("DpwPlugin构造函数执行完毕!"); } public void service() { 
    System.out.println("DpwPlugin调用HwpPlugin提供的功能!"); HwpPlugin hwpPlugin = new HwpPlugin(); hwpPlugin.service(); System.out.println("HwpPlugin提供功能完毕!"); System.out.println("DpwPlugin提供了自己的功能!"); } } 
  • 打包的插件jar结构

在这里插入图片描述

  • 结果:

在这里插入图片描述

  • 思考:

import是从当前jar的根开始,按照路径去寻找指定的类型的.class文件

  • 好处:

不需要反射调用,开发简单

  • 问题:

打出的jar包包含所有依赖,会比较大。

注意:

导出jar的设置需要选择extract to the target jar选项,不推荐另外一个。选择另外一个包结构会有所有变化,不好管理。

在这里插入图片描述

在这里插入图片描述


探索了三天,特此记录。

可以使用maven管理依赖,打包方式采用上面所述,更佳。

小讯
上一篇 2025-02-28 09:08
下一篇 2025-01-06 12:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74766.html