openfire插件开发环境
创建java工程
SamplePlugin:
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; 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("服务器停止,销毁插件!"); } }
web-custom.xml 为空
plugin.xml
<?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></author> <version>1.0</version> <date>28/03/2014</date> <url>http://127.0.0.1:9090/openfire/plugins.jsp</url> <minServerVersion>3.9.1</minServerVersion> <licenseType>gpl</licenseType> <adminconsole> </adminconsole> </plugin>
build.properties:
java.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
tomcat.home=/Users/hujihong/Desktop/java_tools/apache-tomcat-6.0.39
# If you want to build a plugin, please set the value to the plugin name.
# Note:The plugin name must is the same as the plugins folder.
plugin.name=sample
build.xml
<project name="Webapp Precompilation" default="openfire-plugins" basedir="."> <!-- 全局变量设置 --> <property file="build.properties" /> <!-- 插件源码位置 --> <property name="plugin.path" value="../src/plugins/${plugin.name}/src" /> <!-- web应用输出目录 --> <property name="webapp.output.path" value="../src/plugins/${plugin.name}/bin" /> <!-- java servlet相关文件编译jar存放位置 --> <property name="java.jar.dir" value="${webapp.output.path}/java-dist"/> <!-- jsp servlet编译后jar存放位置 --> <property name="jsp.jar.dir" value="${webapp.output.path}/jsp-dist/lib"/> <!-- 定义java servlet编译打包的Jar包名称 --> <property name="java.jar" value="${java.jar.dir}/plugin-${plugin.name}.jar"/> <!-- 定义jsp servlet编译打包的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.output.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}/lib"> <include name="*.jar" /> </fileset> <!-- <fileset dir="D:/Workspace/openfire/build/lib"> <include name="**/*.jar" /> </fileset--> </classpath> </taskdef> <!-- 编译jsp -> servlet class validateXml="false"--> <jasper2 javaEncoding="UTF-8" uriroot="${plugin.path}/web" outputDir="${webapp.output.path}/jsp-dist/src" package="com.hoo.server.plugin" /> <!-- 编译后的servlet class 配置到web.xml文件中 validateXml="false"--> <jasper2 uriroot="${plugin.path}/web" outputDir="${webapp.output.path}/jsp-dist/src" package="com.hoo.server.plugin" webXml="${plugin.web.xml}"/> </target> <!-- 编译jsp 并将其打jar包 --> <target name="compile"> <mkdir dir="${webapp.output.path}/jsp-dist/classes" /> <mkdir dir="${webapp.output.path}/jsp-dist/lib" /> <mkdir dir="${webapp.output.path}/jsp-dist/src" /> <javac destdir="${webapp.output.path}/jsp-dist/classes" optimize="off" encoding="UTF-8" debug="on" failonerror="false" srcdir="${webapp.output.path}/jsp-dist/src" excludes="**/*.smap"> <classpath> <pathelement location="${webapp.output.path}/jsp-dist/classes" /> <fileset dir="${webapp.output.path}/jsp-dist/lib"> <include name="*.jar" /> </fileset> <fileset dir="${tomcat.home}/lib"> <include name="*.jar" /> </fileset> <!-- <pathelement location="${tomcat.home}/common/classes" /> <pathelement location="${tomcat.home}/shared/classes" /> <fileset dir="${tomcat.home}/shared/lib"> <include name="*.jar" /> </fileset> --> <fileset dir="${tomcat.home}/bin"> <include name="*.jar" /> </fileset> </classpath> <include name="**" /> <exclude name="tags/**" /> </javac> <jar jarfile="${jsp.jar}" basedir="${webapp.output.path}/jsp-dist/classes" /> </target> <!-- 将java servlet打包成jar --> <target name="java-jar"> <mkdir dir="${java.jar.dir}"/> <jar jarfile="${java.jar}"> <fileset dir="../bin" includes="**/*.class"/> </jar> </target> <!-- 生成可部署的插件包 --> <target name="plug-jar"> <!-- 插件插件包相关lib、 web目录 --> <mkdir dir="${webapp.output.path}/${plugin.name}/lib"/> <mkdir dir="${webapp.output.path}/${plugin.name}/web/WEB-INF"/> <!-- 复制jsp servlet的jar和java servlet的相关jar包到插件包的lib目录下 --> <copy file="${java.jar}" todir="${webapp.output.path}/${plugin.name}/lib"/> <copy file="${jsp.jar}" todir="${webapp.output.path}/${plugin.name}/lib"/> <!-- 将相关的图片、帮助文档、修改日志等文件复制到插件目录下 --> <copy todir="${webapp.output.path}/${plugin.name}"> <fileset dir="${plugin.path}" includes="*.*"/> </copy> <copy todir="${webapp.output.path}/${plugin.name}/web"> <fileset dir="${plugin.path}/web"> <include name="*"/> <include name="**/*.*"/> <exclude name="**/*.xml"/> <exclude name="**/*.jsp"/> </fileset> </copy> <!-- jsp servlet的web复制到插件目录下 --> <copy file="${plugin.web.xml}" todir="${webapp.output.path}/${plugin.name}/web/WEB-INF"/> <copy todir="${webapp.output.path}/${plugin.name}/web"> <fileset dir="${plugin.path}/web" includes="**/*.xml"/> </copy> <!-- 将国际化相关资源文件复制到插件目录下 <copy file="${webapp.output.path}/bin/i18n" todir="${webapp.output.path}/${plugin.name}"/> --> <!-- 产生可部署插件包 --> <jar jarfile="${webapp.output.path}/${plugin.name}.jar"> <fileset dir="${webapp.output.path}/${plugin.name}" includes="**/**"/> </jar> </target> <!-- 生成没有Web资源的可部署插件包 --> <target name="java-plug-jar"> <!-- 插件插件包相关lib、 web目录 --> <mkdir dir="${webapp.output.path}/${plugin.name}/lib"/> <!-- 复制java servlet的相关jar包到插件包的lib目录下 --> <copy file="${java.jar}" todir="${webapp.output.path}/${plugin.name}/lib"/> <!-- 将相关的图片、帮助文档、修改日志等文件复制到插件目录下 --> <copy todir="${webapp.output.path}/${plugin.name}"> <fileset dir="${plugin.path}" includes="*.*"/> </copy> <!-- 产生可部署插件包 --> <jar jarfile="${webapp.output.path}/${plugin.name}.jar"> <fileset dir="${webapp.output.path}/${plugin.name}" includes="**/**"/> </jar> </target> <!-- 清理生成的文件 --> <target name="clean"> <delete file="${webapp.output.path}/${plugin.name}.jar"/> <delete dir="${webapp.output.path}/${plugin.name}"/> <delete dir="${webapp.output.path}/jsp-dist"/> <delete dir="${webapp.output.path}/java-dist"/> </target> <target name="all" depends="clean,jspc,compile"/> <target name="openfire-plugin" depends="jspc,java-jar"/> <target name="openfire-plugins" depends="all,java-jar,plug-jar"/> <target name="openfire-plugin-java" depends="clean,java-jar,java-plug-jar"/> </project>
增加servlet
package com.hoo.server.plugin; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SampleServlet extends HttpServlet { private static final long serialVersionUID = -5404916983906926869L; @Override public void init() throws ServletException { super.init(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); System.out.println("请求SampleServlet GET Method"); out.print("请求SampleServlet GET Method"); out.flush(); out.close(); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); System.out.println("请求SampleServlet GET Method"); out.print("请求SampleServlet POST Method"); out.flush(); out.close(); } @Override public void destroy() { super.destroy(); } }
在web-custom.xml中增加:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>SampleServlet</servlet-name> <servlet-class>com.hoo.server.plugin.SampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/servlet</url-pattern> </servlet-mapping> </web-app>
打包发布后:http://127.0.0.1:9090/plugins/sample/servlet 可以访问 (http://127.0.0.1:9090/plugins/sample 也可以访问)
增加jsp
在 web目录下增加sample-service.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>hello world: 你好openfire</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!--pageID固定 content与plugin.xml中的id相对应 --> <meta name="pageID" content="sample-service"/> </head> <body> <h3>hello world jsp!! <a href="/plugins/sample/servlet">SampleServlet</a></h3> <div class="jive-contentBoxHeader">jive-contentBoxHeader</div> <div class="jive-contentBox">jive-contentBox</div> <div class="jive-table"> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <thead> <tr> <th> sss</th> <th nowrap>a</th> <th nowrap>b</th> </tr> </thead> <tbody> <tr> <td align="center">asdf</td> <td align="center">asdf</td> <td align="center">asdf</td> </tr> <tr class="jive-even"> <td align="center">asdf</td> <td align="center">asdf</td> <td align="center">asdf</td> </tr> <tr class="jive-odd"> <td align="center">asdf</td> <td align="center">asdf</td> <td align="center">asdf</td> </tr> </tbody> </table> </div> </body> </html>
在plugin.xml中增加:
<adminconsole> <tabid="tab-server"> <sidebarid="sidebar-server-settings"> <item id="sample-service" name="Sample Service" url="sample-service.jsp" description="Click is trigger sample plugin"/> </sidebar> </tab> </adminconsole>
打包发布运行效果: