2015-04-24 1 views
0

J'essaie de construire mongooseim avec rabbitMQ. Im obtenant l'erreur ci-dessous tout en faisant make rel.Mongooseim avec rabbitMQ: mochijson2 potentiellement inclus par deux applications différentes

==> rel (generate) 
ERROR: generate failed while processing /home/mongoose/MongooseIM/rel: {'EXIT',{{badmatch,{error,"Module mochijson2 potentially included by two different applications: mochijson2 and rabbit_common."}}, 
     [{rebar_reltool,generate,2,[]}, 
      {rebar_core,run_modules,4,[]}, 
      {rebar_core,execute,5,[]}, 
      {rebar_core,process_dir1,6,[]}, 
      {rebar_core,process_each,5,[]}, 
      {rebar_core,process_dir1,6,[]}, 
      {rebar_core,process_commands,2,[]}, 
      {rebar,main,1,[]}]}} 
make: *** [rel] Error 1 

Quelle devrait être la meilleure façon de résoudre ce problème? Je n'ai pas eu beaucoup d'informations de google. Mon fichier de configuration de barres d'armature est comme ci-dessous:

{ok, Path} = file:get_cwd(), 
ConfigureOut = Path ++ "/../configure.out", 
Conf = case file:consult(ConfigureOut) of 
      {ok, Terms} -> Terms; 
      E -> io:format("WARN: error ~p reading file: ~p - using default rel config~n", [E, ConfigureOut]), [] 
     end, 

BaseAppsToRun = [compiler, 
       lager, 
       kernel, 
       mnesia, 
       sasl, 
       ssl, 
       stdlib, 
       ejabberd, 
       inets, 
       syntax_tools, 
       p1_stringprep, 
       exml, 
       cowboy, 
       fusco, 
       folsom, 
       exometer, 
       xmerl, 
       amqp_client, 
       rabbit_common], 

AppsToRunIn = BaseAppsToRun ++ proplists:get_value(apps_to_run, Conf, []), 

AppsToRun = ordsets:to_list(ordsets:from_list(AppsToRunIn)), 

BaseAppsToInclude = AppsToRun ++ 
        [asn1, 
        crypto, 
        public_key, 
        goldrush, 
        runtime_tools, 
        p1_utils, 
        ranch, 
        cowlib, 
        bear, 
        mochijson2, 
        p1_cache_tab, 
        pa, 
        base16, 
        cuesport, 
        alarms, 
        idna, 
        recon, 
        setup, 
        xmerl, 
        amqp_client, 
        rabbit_common], 


RemovedApps = [mysql,pgsql,redo,seestar,odbc], 

AppsToIncludeIn = BaseAppsToInclude ++ proplists:get_value(apps_to_include, Conf, []), 

AppsToInclude = ordsets:to_list(ordsets:from_list(AppsToIncludeIn)), 

IncludeApps = lists:map(fun(App) -> {app, App, [{incl_cond, include}]} end, AppsToInclude), 


[{sys, [ 
     {lib_dirs, ["../apps", "../deps"]}, 
     {incl_cond, exclude}, 
     {rel, "mongooseim", "", [mongoose | AppsToRun]}, 
     {rel, "start_clean", "", [kernel,stdlib]}, 
     {boot_rel, "mongooseim"}, 
     {profile, embedded}, 
     {excl_archive_filters, [".*"]}, % do no archive built libs 
     {excl_sys_filters, ["^bin/.*", 
          "^erts.*/bin/(dialyzer|typer)"]}, 

     {app, mongoose, [{incl_cond, include}, {lib_dir, ".."}]} 
     ] ++ IncludeApps}, 


{target_dir, "mongooseim"}, 

{overlay_vars, "vars.config"}, 

{overlay, [{mkdir, "log/sasl"}, 
       {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"}, 
       {copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"}, 
      {copy, "files/mongooseim", "bin/mongooseim"}, 
      {copy, "files/mongooseimctl", "bin/mongooseimctl"}, 
      {copy, "files/app.config", "etc/app.config"}, 
      {template, "files/vm.args", "etc/vm.args"}, 
      {template, "files/ejabberd.cfg", "etc/ejabberd.cfg"}, 
      {mkdir, "var"}, 
      {mkdir, "var/log"} 
      ]} 
]. 
+0

La fusion de ces applications ne semble pas être une bonne idée, pourquoi avez-vous besoin de faire cela? – kjw0188

+0

vous voulez dire mongooseim et rabbitmq? Je veux stocker quelques messages de Mongooseim à Rabbitmq pour le traitement ultérieur. Ce post peut vous donner une meilleure idée de ce que j'essaie de faire. http://stackoverflow.com/questions/29808159/how-to-build-erlang-amqp-client-in-mongooseim/29809232#29809232 –

Répondre

1

J'ai déjà rencontré le même problème auparavant. Il existe plusieurs façons de résoudre le problème.

  1. utilisez l'ancienne version de rabbitmq common. La version common's 2.8.2 ne contient pas le module mochijson2.

  2. Dans le fichier "reltool.config", essayez d'exclure mochijson2 pour rabbitmq common ou mochiweb. (Il doit lire attentivement les documents relatifs à la publication).

+0

Hé mec ... merci beaucoup pour votre réponse. Si je peux effacer mochijson2, il montre la même erreur pour supervor2 (est utilisé par ejabberd). Est-ce que rabbitq common 2.8.2 utilise supervor2? –

+0

Oui, rabbitmq contient déjà 'supervisor2' –

+0

Je pense que vous pouvez supprimer l'un des fichiers ebin pour résoudre le problème. –