• 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>&nbsp;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>

    打包发布运行效果:

  • 相关阅读:
    安装 Docker Machine
    volume 生命周期管理
    data-packed volume container
    用 volume container 共享数据
    如何共享数据?- 每天5分钟玩转 Docker 容器技术(41)
    docker managed volume
    Data Volume 之 bind mount
    Docker 的两类存储资源
    外部世界如何访问容器?
    容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
  • 原文地址:https://www.cnblogs.com/hujihon/p/3699785.html
Copyright © 2020-2023  润新知