Openfire/xmpp : IntelliJ IDEA导入openfire插件开发

Posted Mars-xq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openfire/xmpp : IntelliJ IDEA导入openfire插件开发相关的知识,希望对你有一定的参考价值。

参考:

igniterealtime官网

IntelliJ IDEA导入openfire4.6

openfire(maven版)导入idea并开发插件

一、配置Openfire源码

1、下载源码

下载 Openfire源码 ,作为Maven项目导入IntelliJ IDEA

导入openfire之后,就等待插件下载。如果是第一次创建,下载插件比较多,要等比较长的时间。

该项目使用 Maven,因此应该直接导入到您最喜欢的 Java IDE。目录结构相当简单。主要代码包含在:

  • Openfire/xmppserver - 代表 Openfire 本身核心代码的 Maven 模块

Other folders are:

  • Openfire/build - 用于为不同平台创建安装程序的各种文件
  • Openfire/distribution - 用于将所有部分组合在一起的 Maven 模块
  • Openfire/documentation - igniterealtime.org 上托管的文档
  • Openfire/i18n- 用于管理界面国际化的文件
  • Openfire/plugins - Maven 配置文件以允许构建各种可用的插件
  • Openfire/starter - 一个允许 Openfire 在不同平台上以一致方式启动的小模块

可能报错:

Cannot resolve org.apache.mina:mina-core:2.1.3
Cannot resolve org.apache.mina:mina-integration-beans:2.1.3
Cannot resolve org.apache.mina:mina-integration-ognl:2.1.3

先不用管,进行下列步骤:

2、配置项目

IntelliJ IDEA:

  • 1、Run -> Edit Configurations… -> Add Application

  • 2、fill in following values

    • 1、Name: Openfire
    • 2、Use classpath of module: starter
    • 3、Main class: org.jivesoftware.openfire.starter.ServerStarter
    • 4、VM options (adapt accordingly):

    -DopenfireHome="-absolute path to your project folder-\\distribution\\target\\distribution-base"
    -Xverify:none
    -server
    -Dlog4j.configurationFile="-absolute path to your project folder-\\distribution\\target\\distribution-base\\lib\\log4j2.xml"
    -Dopenfire.lib.dir="-absolute path to your project folder-\\distribution\\target\\distribution-base\\lib"
    -Dfile.encoding=UTF-8

    • 5、Working directory: -absolute path to your project folder-
  • 3、apply

在这里插入图片描述

You need to execute mvnw verify before you can launch openfire.

执行可能没有权限:

./mvnw verify
bash: ./mvnw : Permission denied

# 执行以下即可解决:
sudo chmode -R 777 ./mvnw

# 再次执行即可:
# 下载可能需要花费好几分钟
./mvnw verify

把“-absolute path to your project folder-”,修改成openfire所在路径,我配置完之后是这样:

# Working directory:
/Users/tmk/Downloads/githubdemo/Openfire

# VM options (adapt accordingly):
-DopenfireHome=
"/Users/tmk/Downloads/githubdemo/Openfire/distribution/target/distribution-base"
-Xverify:none
-server
-Dlog4j.configurationFile=
"/Users/tmk/Downloads/githubdemo/Openfire/distribution/target/distribution-base/lib/log4j2.xml"
-Dopenfire.lib.dir=
"/Users/tmk/Downloads/githubdemo/Openfire/distribution/target/distribution-base/lib"
-Dfile.encoding=UTF-8

注意:文件分隔符斜线方向,要按照自己系统

等命令运行完成,就可以运行整个项目了

在这里插入图片描述

浏览器可以打开链接,进入openfire的安装页面

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

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

在这里插入图片描述

登录账号设置:

用户名 : admin
邮箱: xxxxxx@qq.com
密码 : xxxxx

在这里插入图片描述

二、开发插件

参考:

Openfire Plugins

Openfire Plugin Developer Guide

IntelliJ IDEA导入openfire4.6

openfire(maven版)导入idea并开发插件

openfire-emailOnAway-plugin : GitHub

openfire-userStatus-plugin : GitHub

创建项目,目录结构如下:


├── README.md
├── changelog.html
├── emailOnAway.iml
├── plugin.xml
├── pom.xml
├── readme.html
├── src
│   └── java
│       └── com
│           └── tempstop
│               └── emailOnAway.java

1、实现Plugin接口

编写openfire插件,必须实现一个插件接口Plugin,只要实现了这个接口,就会被openfire认为是插件。

import org.jivesoftware.openfire.container;

public interface Plugin {

    /**
     * Initializes the plugin.
     *
     * @param manager the plugin manager.
     * @param pluginDirectory the directory where the plugin is located.
     */
    void initializePlugin( PluginManager manager, File pluginDirectory );

    /**
     * Destroys the plugin.<p>
     *
     * Implementations of this method must release all resources held
     * by the plugin such as file handles, database or network connections,
     * and references to core Openfire classes. In other words, a
     * garbage collection executed after this method is called must be able
     * to clean up all plugin classes.
     */
    void destroyPlugin();

}

2、修改pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <parent>
        <artifactId>plugins</artifactId>
        <groupId>org.igniterealtime.openfire</groupId>
        <!--        按需修改版本      -->
        <version>4.6.1</version>
    </parent>
    
    <!--    以下几个改成自己需要的     -->
    <groupId>org.igniterealtime.openfire.plugins</groupId>
    <artifactId>randomavatar</artifactId>
    <version>1.1.0-SNAPSHOT</version>
    <name>Random Avatar Generator Plugin</name>
    <description>Generates semi-random avatar images.</description>

    <developers>
        <developer>
            <!--        改成自己名字      -->
            <name>able xq</name>
        </developer>
    </developers>

    <build>
        <sourceDirectory>src/java</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <!-- Where dependencies are obtained (such as the parent project). -->
        <repository>
            <id>igniterealtime</id>
            <name>Ignite Realtime Repository</name>
            <url>https://igniterealtime.org/archiva/repository/maven/</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <!-- Typically used to retrieve Maven plugins that are used by this project.
             This apparently is also used to botain the dependencies _used by_ these
             plugins (such as the openfire-plugin-assembly-descriptor, needed to
             package the project as an Openfire plugin!) -->
        <pluginRepository>
            <id>igniterealtime</id>
            <name>Ignite Realtime Repository</name>
            <url>https://igniterealtime.org/archiva/repository/maven/</url>
        </pluginRepository>
    </pluginRepositories>

</project>

3、添加plugin.xml


<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <!--   实现 org.jivesoftware.openfire.container.Plugin 的类     -->
    <class>org.igniterealtime.openfire.plugins.randomavatar.RandomAvatarPlugin</class>
    <!--   插件名称       -->
    <name>${project.name}</name>
    <!--   插件描述       -->
    <description>${project.description}</description>
    <!--   插件作者   -->
    <author>Guus der Kinderen</author>
    <!--   插件版本   -->te x
    <version>${project.version}</version>
    <!--   插件发布日期。 日期必须是mm / dd / yyyy,例如07/21/2006。    -->
    <date>03/29/2018</date>
    <!--
           运行插件所需的最低版本(由OpenFire 2.1.2及更高版本支持)。
           如果服务器版本小于所需值,则不会启动插件。
    -->
    <minServerVersion>4.1.5</minServerVersion>

</plugin>

4、打包

先执行 clean 再执行 install

在这里插入图片描述执行完生成target文件,可以找到生成的jar

在这里插入图片描述
上传到openfire控制台就可以使用功能了。

在这里插入图片描述

以上是关于Openfire/xmpp : IntelliJ IDEA导入openfire插件开发的主要内容,如果未能解决你的问题,请参考以下文章

数据包中 getChildElement 中的 Openfire XMPP 组件命名空间

使用 servlet 将用户注册到 Openfire XMPP 服务器?

Openfire XMPP Smack RTC IM 即时通讯 聊天

Openfire Xmpp Chat 无法在启用 SSL 的情况下工作

连接 throw stropes.js 时未收到来自 Openfire Xmpp 的通信

向 ios 发送推送通知以与离线用户聊天,openfire xmpp