我一直在研究一些相对简单的Erlang模块。我有4个模块可以一起工作。所有模块名称都是“命名空间”,如下所示:
project
project_helper
project_another_module
project_third_submodule
模块很简单。它们只包含函数。没有什么是并发的。没有进程,主管或gen_servers。只是功能。要使用代码,您可以在顶级project
模块中调用函数。所有呼叫都是同步的。传入数据,等待函数完成,然后返回数据。
我的问题是,如何打包此代码?是否需要将其设置为应用程序? Erlang应用程序提供了哪些好处?
答案 0 :(得分:1)
您必须将其打包为应用程序,因此其他应用程序可能会将您的库作为依赖项放在其.app文件中。 在发布生成过程中使用此信息来包含您的库。
要执行此操作,请忽略{mod, ...}
中的your_library.app
部分。
来自应用手册:(erl -man app
)
mod:
Specifies the application callback module and a start argument, see application(3).
The mod key is necessary for an application implemented as a supervision tree, or the application controller will not know how to start it. The mod key can be
omitted for applications without processes, typically code libraries such as the application STDLIB.
答案 1 :(得分:1)
这取决于您计划如何使用代码。 您不必将代码设置为应用程序。 打包它的简单方法是使用命令c(Module)通过Erlang shell编译所有模块,然后压缩文件夹并在需要时发送它。
但是,我建议遵循OTP应用程序的最佳实践: http://learnyousomeerlang.com/building-otp-applications
如果您将代码设置为OTP应用程序,它将为您提供可重用性。 您可以将这些模块包含在以后创建的其他应用程序中。
我建议使用rebar(https://github.com/rebar/rebar/wiki)作为构建工具。 并将您的代码放入某个源代码控制环境中,以便您可以更轻松地将代码包含在未来的项目中。
答案 2 :(得分:0)
当需要打包一组模块时,它们仍属于应用程序。该应用程序根本不需要回调模块。了解一些Erlang称这些类型的应用程序"图书馆应用程序"。库.app
文件应该像普通的.app
文件一样。唯一的区别是mod元组({mod, {Module, Args}}
)不存在。
有关详细信息,请参阅LYSE:http://learnyousomeerlang.com/building-otp-applications#library-applications