• Ejabberd导入到eclipse


    ejabberd 在eclipse(erlide)中的配置、调试、运行

     

    最近在折腾ejabberd,将ejabberd项目配置到eclipse中进行编译、调试等,现在将过程记下来,希望能帮助到需要的人。

    准备

    1. 本次环境是在linux中进行,博主的linux是fedora20.
    2. 安装erlang 
    3. 安装eclipse
    4. 安装eclipse插件:erlide
    5. 以上安装过程请自行搜索相关教程,本文略。

      下面我们就把将ejaberd导入eclipse过程中所遇到的问题各个击破。

    下载ejabberd项目源代码,将整个工程导入到eclipse中,怎么导就别问我啦!然后就是惨不忍睹的各种错误:

    • -include_lib("p1_xml/include/xml.hrl").错误
    • 凡是用到xml模块的地方都是错误,例如  类似  presence :: {binary(), xmlel()} ——type xmlel() undefined错误,该错误系include 相关库失败导致

      改错误是因为项目中引用了process-one的一些基础设施或者说工具模块:

    • esip
    • goldrush
    • lager——用于错误日至的格式化输出
    • p1_cache_tab
    • ...

      解决方法如下:

      在ejabberd的源代码文件夹根目录下,终端中运行:

      ./rebar get-deps

      这会下载所需的工具模块,放在deps文件夹下

      然后编译工具库:

      ./rebar compile

          ./rebar get-deps 执行可能报错 检查一下git 是否已经安装,git是否已经加入PATH  如果没有 将 /usr/libexec/git-core 加入PATH

      工具库就编译成能在erlang环境运行的模块,很多模块都是用 application behaviour编写的,在ejabberd中会见到很多形如:application:start(app名称).这样的代码,启动工具应用程序。

      下载编译好之后将deps目录下的所有文件复制到你系统中的erlang所在的lib文件夹下,如我的系统用如下命令:

      sudo cp -R ./deps/*  /usr/local/lib/erlang/lib/

      请将目标目录替换成自己系统中的目录,这样erlang就能用这些应用和模块了,include_lib语句也happy了。

      解决了上面的问题之后还有一个大问题:找不到XmppAddr.hrl文件!!!

      XmppAddr.hrl需要从XmppAddr.asn1中产生,这个文件在源代码文件夹下的asn1文件夹里面,用erlang的编译工具能够将其编译成.hrl文件。具体请参见:http://www.erlang.org/doc/apps/asn1/asn1_ug.html,这里从略。我可以贴出我产生的文件如下:

    复制代码
    %% Generated by the Erlang ASN.1 compiler version:3.0.1
    %% Purpose: Erlang record definitions for each named and unnamed
    %% SEQUENCE and SET, and macro definitions for each value
    %% definition,in module XmppAddr
    
    
    
    -ifndef(_XMPPADDR_HRL_).
    -define(_XMPPADDR_HRL_, true).
    
    -define('id-on-xmppAddr', {1,3,6,1,5,5,7,8,5}).
    -endif. %% _XMPPADDR_HRL_
    复制代码

    将以上内容命名为XmppAddr.hrl并拷贝到ejabberd项目include文件夹下。

    最后eclipse所选择的erlang runtime 要和之前编译工具库的一样,不然同样无法运行,设置办法如下:

     在菜单中 : Window/Prefrences/Erlang/Installed runtimes 中勾选对应的runtime。

    经过以上之后ejabberd就能在eclipse中编译了,但是距离跑起来还有很大的差距。

      ejabberd.app 文件缺失,解决方法是将src文件夹下的ejabberd.app.src.in文件 改名为ejabberd.app放入编译输入目录,即.beam文件目录,也即ebin文件夹下。

    此时如果分步运行的话可以运行许多启动代码,但估计程序会找不到 配置文件而终止,这些请自己跟踪代码,自自行修改制定,并重新编译即可。

      ejabberd启动方式:在elipse的console中(已进入erlang命令行)运行:

      erjabberd:start(). %%这个是ejabberd的入口!

    大致如此,有问题请随时提问。

  • 相关阅读:
    mysql自增主键
    mysql数据库的备份与恢复
    mysql(mariadb)新建用户及用户授权管理
    vm如何安装xenserver
    安装Centos7时提示 /dev/root does not exits
    python简单实现目录对比
    PM2 实现 自动重启 node 服务 , 例如 服务器重启时,自动启动 之前的服务
    阿里云免费ssl申请配置
    umi-request 配置,出现 某一个接口跨域
    ndm 带空格 做整体
  • 原文地址:https://www.cnblogs.com/John5/p/5289566.html
Copyright © 2020-2023  润新知