我查了rebar
,但这看起来太复杂了。也许有人可以在以下钢筋应用程序中发布一些说%Post your code here
的内容:
%%%-------------------------------------------------------------------
%% @doc myapp public API
%% @end
%%%-------------------------------------------------------------------
-module('myapp_app').
-behaviour(application).
%% Application callbacks
-export([start/2
,stop/1]).
%%====================================================================
%% API
%%====================================================================
start(_StartType, _StartArgs) ->
'myapp_sup':start_link().
%%--------------------------------------------------------------------
stop(_State) ->
ok.
初学者是否有更容易的选择?
答案 0 :(得分:4)
如果要创建任何非平凡的东西,你就无法逃避学习语言的构建系统。如果你熟悉GNU Make,你可以使用erlang.mk而不是Rebar,但我相信Rebar3是最适合初学者的。
要解决在REPL中运行某人库代码的具体问题,请使用rebar3尝试以下内容:
rebar3新应用
忽略它现在创建的源文件。修改rebar.config
和add dependencies。然后,启动一个加载了这些依赖项的REPL(以及您在src/
目录中创建的任何源文件):
rebar3 shell
答案 1 :(得分:2)
我认为没有更简单的方法。学习钢筋看起来像是合乎逻辑的一步。我还认为,螺纹钢需要付出很多努力,而{2}对母羊Erlang更有吸引力。
答案 2 :(得分:1)
我去年开始学习erlang,我发现对熟悉erlang非常有帮助的是在你选择的简单记事本中编写代码,并将其保存为myapp_app.erl。然后我打开erlang控制台,使用编译命令c
来编译我的模块,然后让我调用我的函数。
> c(myapp_app).
> myapp_app:start(a,b).
答案 3 :(得分:0)
Erlang将在代码路径中查找模块。
您可以通过调用code:get_path()
:
4> code:get_path().
[".","/usr/lib/erlang/lib/kernel-3.0.3/ebin",
"/usr/lib/erlang/lib/stdlib-2.2/ebin",
"/usr/lib/erlang/lib/xmerl-1.3.7/ebin",
...
...
如您所见,包含当前目录,其他所有内容都可能位于某个默认系统安装位置。对我来说,这意味着一切都将在' / usr / lib / erlang / lib'因为库路径与Debian Linux的关系,以及其他路径' APP-VERSION / ebin'从库路径扩展(见下文)......
可以通过调用code:lib_dir()
:
5> code:lib_dir().
"/usr/lib/erlang/lib"
6>
通过查找看起来像应用程序的所有内容来扩展库路径,即每个' APP-VERSION / ebin'它下面存在,它被添加到代码路径中。那是如何生成代码路径的。当然还添加了当前目录。
code module(值得一读)有各种更改代码路径的功能,还有一些环境变量,例如 ERL_LIBS ,可以添加更多路径,而 -pa 参数也允许您添加代码路径。
注意 ERL_LIBS添加了一个lib,将搜索APP-VERSION / ebin的出现次数,其中-pa完全按照原样添加代码路径。
所以,一旦你知道了这一切,安装模块的最简单方法是......
OK!这是最简单的,但稍微更先进的解决方案可能是合适的......
完成后,启动Erlang,它应该添加' my_app-1.0 / ebin'到代码路径和应该找到的任何梁文件。它们已安装。
注意' my_app-1.0'可以是任何东西。它的惯例只是说这应该是带有短划线和版本的应用程序的名称。虽然是一个有用的约定。
这只是安装一个模块,这是你的问题,但为了完整起见,值得一提的是,安装应用程序可以通过将 .app 文件复制到代码路径位置来完成同样。就这么简单。
对于初学者来说,当前目录中没有模块源(并在那里编译它们)确定并不太难?然后,将文件复制到系统位置只需要一小步。通常,您下载和编译的第三方应用程序将生成一个带有应用程序文件和所有光束文件的ebin目录,因此这只是将ebin应用到my_app-version / ebin的问题......
答案 4 :(得分:0)
如果你想用一些玩具应用程序来试验erlang,为了掌握语言,进程创建,通信甚至简单的监督树,你真的不需要一个应用程序,一个简单的标准otp目录结构就足够了启动功能。
另一方面,如果您打算构建一个具有依赖关系的应用程序,如果您想创建一个库,一个版本,管理单一测试和功能测试......那么rebar(和rebar3)将使您的生活更加简单
您将在learn you some erlang: Building application with OTP及以下章节中找到基本知识,了解如何定义应用程序或版本。
答案 5 :(得分:0)
这是我最终做的事情:
$ git clone https://github.com/rebar/rebar3.git $ cd rebar3 .../rebar3$ ./bootstrap
现在你有了脚本rebar3并且可以将它复制到某个地方 您的$ PATH,如上一节所述。
或者,您可以下载.zip file
,解压缩,然后切换到rebar3目录并发出./bootstrap
命令。
在rebar3
目录中创建可执行文件/rebar3
。我将rebar3
可执行文件移动到/usr/local/bin
,这是我的PATH环境变量中列出的目录(讨论了各种可能的PATH位置here):
.../rebar3$ sudo mv rebar3 /usr/local/bin
这允许我在任何提示符下使用rebar3命令。作为an alternative
,在您创建应用程序后(请参阅下一步),您可以将rebar3复制到应用程序的目录中,并从该目录发出如下的钢筋命令:
$ ./rebar3 .....
~/erlang_programs$ rebar3 new app myapp
(替换您的应用名称代替:myapp)
然后:
~/erlang_programs$ cd myapp
~/erlang_programs/myapp$
为了使用jsx
,第三方JSON库,我将jsx
添加为dependency:
依赖关系列在deps键下的
rebar.config
文件中:{erl_opts, [debug_info]}. {deps, [ {jsx, "2.8.0"} ]}.
rebar.config
就在这里:
~/erlang_programs/myapp$ ls
LICENSE _build rebar.lock
README.md rebar.config src
然后我将我的erlang程序添加到myapp/src
目录:
程序my_app / SRC / my.erl:
-module(my).
-export([test/0]).
test() ->
jsx:decode(<<"{\"data\": [1, 2, 3]}">>).
最后:
~/erlang_programs/myapp$ rebar3 shell
===> Verifying dependencies...
===> Fetching jsx ({pkg,<<"jsx">>,<<"2.8.0">>})
===> Version cached at /Users/7stud/.cache/rebar3/hex/default/packages/jsx-2.8.0.tar is up to date, reusing it
===> Compiling jsx
===> Compiling myapp
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V6.4 (abort with ^G)
1> my:test().
[{<<"data">>,[1,2,3]}]
如果您对.erl文件进行了更改,在我的情况下是文件my.erl,您不需要退出shell - 只需像往常一样进行编译,例如: c(my)
。