1. 程式人生 > >openfire外掛開發全過程

openfire外掛開發全過程

這篇是簡單外掛開發,下篇聊天記錄外掛。

開發環境:

System:Windows

WebBrowser:IE6+、Firefox3+

JavaEE Server:tomcat5.0.2.8、tomcat6

IDE:eclipse、MyEclipse 8

開發依賴庫:

Jdk1.6、jasper-compiler.jar、jasper-runtime.jar、openfire.jar、servlet.jar

Email:[email protected]

一、準備工作

2、 新建一個自己的java project工程,新增的jar包如下:

將jasper-compiler.jar、jasper-runtime.jar、servlet.jar新增到新建的工程中。如果沒有jar先不要急,看下面的步驟:

下載後的openfire原始碼目錄是這樣的

clip_image002

如果你有ant工具可以用dos命令列的方式,直接執行build目錄中的ant指令碼,執行指令碼後,你會發現有一個target的目錄。該目錄如下:

clip_image004

在lib目錄中可以找到我們需要的jar檔案了,將openfire.jar也新增到你的工程中。

如果你沒有安裝ant你可以用MyEclipse,將openfire原始碼中的build、documentation、resources目錄複製到一個Java Project中,然後在MyEclipse中執行src中的build.xml ant指令碼就會出現和上面一樣的檔案目錄。

建議將你的MyEclipse中的openfire原始碼工程目錄設定成這樣的

clip_image006

其中,src/plugins/tree是我自己寫的外掛,現在暫時可以無視。而target就是我們需要的,裡面存放了openfire的配置和需要的jar包。Work是工作目錄,是一個完整的openfire伺服器。如果你還沒有下載openfire伺服器的話,可以用這個伺服器。

3、 瞭解openfire原始碼中的外掛

我們找一個外掛目錄看看,主要看看裡面的結構,目錄結構很重要。因為我們將寫好的外掛打成jar包後,打包的jar的目錄有一定規範結構,不能隨便建立其他目錄。

clip_image008

這是一個userservice的外掛,在src/java中是我們的外掛原始碼;web目錄中則是前端的頁面,其中web-custom.xml是配置當前外掛UserServiceServlet配置;changelog.html是修改日誌;logo_small.gif是外掛圖示;plugin.xml是我們配置外掛的檔案,這個很重要(在這裡先提示下);

二、開發簡單外掛

工程現在的目錄機構如下

clip_image010

1、 建立自己的外掛類,SamplePlugin.java,裡面簡單的寫點內容。

package com.hoo.server.plugin;
import java.io.File;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
/**
 * <b>function:</b> openfire server plugin sample
 * @author hoojo
 * @createDate 2013-2-28 下午05:48:22
 * @file SamplePlugin.java
 * @package com.hoo.server.plugin
 * @project OpenfirePlugin
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
public class SamplePlugin implements Plugin {
    private XMPPServer server;
    @Override
    public void initializePlugin(PluginManager manager, File pluginDirectory) {
        server = XMPPServer.getInstance();
        System.out.println("初始化…… 安裝外掛!");
        System.out.println(server.getServerInfo());
    }
    @Override
    public void destroyPlugin() {
        System.out.println("伺服器停止,銷燬外掛!");
    }
}

比較簡單,如果你將外掛安裝在openfire伺服器上的時候,啟動伺服器一個可以看到初始化的內容,關閉伺服器可以看到銷燬的內容。

2、 配置外掛

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<!-- Main plugin class  這裡是最重要滴,就是你的外掛的全路徑-->
<class>com.hoo.server.plugin.SamplePlugin</class>
<!-- Plugin meta-data -->
<name>SimplePlugin</name>
<description>This is the my sample plugin.</description>
<author>hoojo</author>
<version>1.0</version>
<date>28/02/2013</date>
<url>http://localhost:9090/openfire/plugins.jsp</url>
<minServerVersion>3.4.1</minServerVersion>
<licenseType>gpl</licenseType>
<adminconsole>    
    </adminconsole>
</plugin>

注意上面的class的配置,那個配置是最為重要的,配置的是外掛的全路徑;name是外掛的名稱,安裝後的外掛名稱;author是外掛作者;lincenseType是協議;adminconsole是配置外掛關聯的頁面的;稍後再講!

3、 可部署的外掛包jar的目錄結構

這個很重要,目錄結構將決定你外掛 釋出的成敗。

在編寫命令之前,我們可以看看openfire伺服器中已經安裝的外掛的jar包的目錄結構,到時候我們也要打包成那樣的結構才行的。必須打包成這樣的目錄結構,否則哼哼……後果很嚴重的!宣告!

在我機器中的openfire伺服器中,外掛目錄在C:\Program Files\openfire\plugins,裡面有一個search.jar外掛。提示:當你將一個可以安裝的jar安裝在openfire後,會被openfire解壓成目錄結構。就向JavaEE中的war包釋出的應用伺服器中的效果一樣的。

打成可部署的外掛jar包(相當於釋出的應用伺服器的目錄結構)的search.jar目錄結構如下:

clip_image012

首先看看檔案命名,search.jar就是我們打包的外掛的名稱,而國際化的配置檔案就是以外掛名稱開頭_118n.properties或外掛名稱開頭_118n_language.properties;而lib目錄中的是外掛的src目錄的class打成的jar包;帶有*-jspc.jar是web目錄下的jsp編譯成servlet後的class打成的包檔案,都是以外掛名稱開頭;WEB-INF/web.xml配置的是*-jspc.jar中的class檔案;web/images是圖片檔案,需要用到的圖片都放置在這個目錄即可;plugin.xml檔名固定的,裡面是配置外掛的xml內容。

其中,118n國際化檔案,它主要是我們在外掛中的jsp和Java程式中的國際化配置。Web目錄存放jsp、圖片、web.xml內容;lib目錄是存放外掛的src目錄的java程式碼編譯後打包的jar,以及jsp編譯成servlet的class打包後的jar;其他的檔案都是根目錄的;

對照上面外掛包的jar,我們看看實際開發中的目錄結構:

clip_image014

稍提醒下,如果你的外掛中包含servlet,那你需要將它配置在web目錄下的WEB-INF/web-custom.xml目錄中;這個在以後會經常用到的,比如你提供一個介面給外部程式呼叫的情況下。目錄結構參考:

clip_image016

UserServiceServlet配置在web-custom.xml目錄中。

4、 編寫ant命令,打可部署jar包。如果你不懂ant命令也沒關係,你總知道java的基本常用的dos命令。只不過ant就是將dos轉換成一個可重複多次呼叫的命令列。

在工程的根目錄中新建一個build目錄,新建

build.xml

<project name="Webapp Precompilation" default="openfire-plugins" basedir=".">
    <property file="build.properties" />
    <!-- java servlet相關檔案編譯jar存放位置 -->
    <property name="java.jar.dir" value="${webapp.path}/java-dist"/>
    <!-- jsp servlet編譯後jar存放位置 -->
    <property name="jsp.jar.dir" value="${webapp.path}/jsp-dist/lib"/>
    <!-- 定義java servlet和jsp servlet的jar包名稱 -->
    <property name="java.jar" value="${java.jar.dir}/plugin-${plugin.name}.jar"/>
    <property name="jsp.jar" value="${jsp.jar.dir}/plugin-${plugin.name}-jsp.jar"/>
    <!-- jsp servlet配置到web.xml中 -->
    <property name="plugin.web.xml" value="${webapp.path}/jsp-dist/web.xml"/>
    <!-- 編譯jsp 並生成相關jar、xml檔案 -->
    <target name="jspc">
        <taskdef classname="org.apache.jasper.JspC" name="jasper2">
            <classpath id="jspc.classpath">
                <pathelement location="${java.home}/../lib/tools.jar" />
                <fileset dir="${tomcat.home}/bin">
                    <include name="*.jar" />
                </fileset>
                <fileset dir="${tomcat.home}/server/lib">
                    <include name="*.jar" />
                </fileset>
                <fileset dir="${tomcat.home}/common/lib">
                    <include name="*.jar" />
                </fileset>
                <!--
                <fileset dir="D:/Workspace/openfire/build/lib">
                    <include name="**/*.jar" />
                </fileset-->
            </classpath>
        </taskdef>
        <!-- 編譯jsp->servlet class -->
        <jasper2 javaEncoding="UTF-8" validateXml="false"
            uriroot="${plugin.path}/web"
            outputDir="${webapp.path}/jsp-dist/src"
            package="com.hoo.openfire.plugin.${plugin.name}" />
        <!-- 編譯後的servlet class 配置到web.xml檔案中 -->
        <jasper2
            validateXml="false"
            uriroot="${plugin.path}/web"
            outputDir="${webapp.path}/jsp-dist/src"
            package="com.hoo.openfire.plugin.${plugin.name}"
            webXml="${plugin.web.xml}"/>
    </target>
    <!-- 編譯jsp 並將其打jar包 -->
    <target name="compile">
        <mkdir dir="${webapp.path}/jsp-dist/classes" />
        <mkdir dir="${webapp.path}/jsp-dist/lib" />
        <mkdir dir="${webapp.path}/jsp-dist/src" />
        <javac destdir="${webapp.path}/jsp-dist/classes" optimize="off"
            encoding="UTF-8" debug="on" failonerror="false"
            srcdir="${webapp.path}/jsp-dist/src" excludes="**/*.smap">
            <classpath>
                <pathelement location="${webapp.path}/jsp-dist/classes" />
                <fileset dir="${webapp.path}/jsp-dist/lib">
                    <include name="*.jar" />
                </fileset>
                <pathelement location="${tomcat.home}/common/classes" />
                <fileset dir="${tomcat.home}/common/lib">
                    <include name="*.jar" />
            
           

相關推薦

openfire外掛開發全過程

這篇是簡單外掛開發,下篇聊天記錄外掛。 開發環境: System:Windows WebBrowser:IE6+、Firefox3+ JavaEE Server:tomcat5.0.2.8、tomcat6 IDE:eclipse、MyEclipse 8

openfire外掛開發除錯詳解[圖文]

        最近接觸xmpp協議和openfire伺服器,文件貌似不怎麼豐富,中文資料就更加屈指可數了。這麼多中文部落格,我可沒看到一篇像樣的。我們在一個軟體上做二次開發,最關心的肯定是如何方便地進行除錯,特別是像openfire這種,如果不知道如何除錯的話,絕對不是一

openfire外掛開發簡單例項

網上找了半天openfire外掛開發的例子,都只是從原理上將的,並不利於菜鳥學習,所以我在這裡從動手方面將下openfire外掛的開發 1  這是我建立的目錄,請大家看清目錄結構 2  再次從包結構看下我建立的目錄結構   3  L

開發部署提速 8 倍,我參與貢獻這款 IDE 外掛全過程

如何像參與開源那樣,去參與一款 IDE 外掛的設計? 作為一款 IDE 外掛的使用者,我是否能決定下一個版本的功能? 自從

微信H5支付開發全過程(除內置微信以外的瀏覽器)

app 獲取ip getenv 過程 comm ati psi 初始 cli 前言:網上都是~ 呵呵 自己搞 只要花時間 多問客服總會有的 只說程序不說準備工作 自己ID 或者秘鑰都準備好了 寫的有點兒亂 可以把所有的方法 放在一個文件中調用 public funct

春哥技術博客:商城類小程序開發全過程

小程序開發 小程序源碼 小程序 商城類小程序是所有類別小程序中開發的熱點,但其相對於其他類別的小程序,具有邏輯復雜、功能需求較大等特點,因此,對開發者具有一定的基礎要求。那我們就止步於前了嗎? 當然不! 春哥源碼團隊,本文主要講述商城小程序開發的過程,並附上了源碼,希望對各個開發者能有所幫助。 一

微信公眾號支付開發全過程(java版)

sdk 命令 所有 data 權限 {} servle res ast 文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關註我的微信公眾號:好好學java,獲取優質學習資源。 一、微信官方文檔微信支付開發流程(公眾號支付) 首先我們到微信支付的官方文檔的開發步驟部分查

phonegap3.4外掛開發入門例子

根據官方文件(3.4.0)的外掛開發指南: http://docs.phonegap.com/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide http://docs.phonegap.com/e

openmediavault 4.1.3 外掛開發

參考網址:https://forum.openmediavault.... 建立應用GUI 建立應用目錄:/var/www/openmediavault/js/omv/module/admin/service/example 建立選單節點: Node.js ``` // require("js/

QGIS3和QGIS2外掛開發差異記錄

qgis2外掛開發的入門級教程 http://www.qgistutorials.com/zh_TW/docs/building_a_python_plugin.html 仿造該教程在qgis3當中進行開發,會碰到許多坑。這裡簡單記錄一下。 1. QGIS3 中,QFileD

chrome外掛開發(二) 入門篇(content script

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

VSCODE外掛開發:使用者輸入輸出

閱讀這篇文章之前,假設你已經具有開發helloworld的外掛的能力。 vscode.window 簡介 vscode.window 負責當前啟用視窗的輸入輸出,比如展示資訊,和使用者輸入等功能都是用vscode.window實現 程式碼輸出提示資訊 簡單的輸出提示資訊 使用vscode.windo

VSCode外掛開發全攻略(七)WebView

更多文章請戳VSCode外掛開發全攻略系列目錄導航。 什麼是Webview 大家都知道,整個VSCode編輯器就是一張大的網頁,其實,我們還可以在Visual Studio Code中建立完全自定義的、可以間接和nodejs通訊的特殊網頁(通過一個acquireVsCodeApi特殊方法),這個網頁就叫W

Chrome瀏覽器外掛開發入門

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

VSCode外掛開發全攻略(六)開發除錯技巧

更多文章請戳VSCode外掛開發全攻略系列目錄導航。 前言 在介紹完一些比較簡單的內容點之後,我覺得有必要先和大家介紹一些開發中遇到的一些細節問題以及技巧,特別是後面一章節將要介紹WebView的知識,這個坑會比較多,避免大家走彎路。 開發方式 最理想的方式是準備雙顯示器,一個寫程式

Pentaho Data Integration (Kettle) step外掛開發

一,開發環境搭建 1,kettle原始碼  因為kettle開發文件支援有限,所以必須有一份原始碼備查。原始碼地址: https://github.com/pentaho/pentaho-kettle  選擇9.0版本,下載zip  kettle需要jd

kettle 外掛開發以及常用的介面和物件

1. kettle外掛開發的四個常用的介面介紹 1.1 轉換步驟外掛開發至少需要實現 四個介面:   1)StepMetaInterface:該介面主要是針對元資料的處理,載入xml檔案,校驗,主要針對一個步驟的定義基本 資料.在轉換開始之前,kettle會呼

VSCode外掛開發全攻略(五)跳轉到定義、自動補全、懸停提示

更多文章請戳VSCode外掛開發全攻略系列目錄導航。 跳轉到定義 跳轉到定義其實很簡單,通過vscode.languages.registerDefinitionProvider註冊一個provider,這個provider如果返回了new vscode.Location()就表示當前游標所在單詞支援跳轉

覆盤王者榮耀手遊開發全過程,Unity引擎使用幀同步放棄狀態同步

https://blog.csdn.net/anypkv/article/details/78480877 http://king.shandian.biz/88.html   如今已經大獲市場成功的《王者榮耀》一直是業內各方關注的物件,而我們也知道這款產品在成為國民級遊戲之前

Eclipse二次開發:Eclipse 外掛開發法則

擴充套件者     貢獻法則( Contribution Rule ):一切皆是貢獻。     遵循法則( Conformance Rule):外掛必須遵循預期的介面。  &nbs