这个例子是cowboy helloword例子改造为rebar3的例子。
1.首先需要下载一个idea,免费版即可
2.随便创建一个项目,进入idea后,File->Plugins,搜索安装erlang,安装完毕重启idea
3.File->Other Settings->Erlang External Tools
4.点击上图Download the latest Rebar 3,放到自己熟悉的目录,下载完毕后找到下载目录,配置环境变量。window需要在相同目录创建一个reabr3.cmd文件,并粘贴上如下内容。(详细可查官网Getting Started | Rebar3)
@echo off
setlocal
set rebarscript=%~f0
escript.exe "%rebarscript:.cmd=%" %*
然后运行rebar3 --version检查是否安装成功,能看到版本号就成功了。
5.创建项目,如下创建一个名为cowboy_study的项目
rebar3 new release cowboy_study
6.导入项目,进入idea内,File->New->Project from Existing Sources,然后选择创建的项目,ok。
选择导入项目类型,next
选择之前下载的rebar,注意,这里windows需要选择rebar3.cmd否者idea可能无法导入rebar3项目。然后一直next直到完成。
7.进入项目后将rebar3.cmd修改为rebar3,具体步骤参考步骤3,只需要选中rebar3而不是rebar3.cmd。
8.添加cowboy依赖,打开rebar3.config,添加cowboy依赖
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.7.1"}}}
完整文件如下所示:
{erl_opts, [debug_info]}.
{deps, [
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.7.1"}}}
]}.
{relx, [{release, {cowboy_study, "0.1.0"},
[cowboy_study,
sasl]},
{mode, dev},
%% automatically picked up if the files
%% exist but can be set manually, which
%% is required if the names aren't exactly
%% sys.config and vm.args
{sys_config, "./config/sys.config"},
{vm_args, "./config/vm.args"}
%% the .src form of the configuration files do
%% not require setting RELX_REPLACE_OS_VARS
%% {sys_config_src, "./config/sys.config.src"},
%% {vm_args_src, "./config/vm.args.src"}
]}.
{profiles, [{prod, [{relx,
[%% prod is the default mode when prod
%% profile is used, so does not have
%% to be explicitly included like this
{mode, prod}
%% use minimal mode to exclude ERTS
%% {mode, minimal}
]
}]}]}.
下载完后cowboy_study.app.src文件添加cowboy
{application, cowboy_study,
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {cowboy_study_app, []}},
{applications,
[kernel,
stdlib,
cowboy %%这里添加cowboy
]},
{env,[]},
{modules, []},
{licenses, ["Apache 2.0"]},
{links, []}
]}.
9.修改cowboy_study_app.erl代码,完整如下所示:
-module(cowboy_study_app).
-behaviour(application).
-export([start/2, stop/1]).
start(_StartType, _StartArgs) ->
Dispatch = cowboy_router:compile([
{'_',[
{"/",toppage_h,[]}
]}
]),
{ok,_} = cowboy:start_clear(http,[{port,8080}],#{
env=>#{dispatch=>Dispatch}
}),
cowboy_study_sup:start_link().
stop(_State) ->
ok = cowboy:stop_listener(http).
%% internal functions
10.创建toppage_h.erl文件,写下以下代码:
-module(toppage_h).
-author("admin").
%% API
-export([init/2]).
init(Req,Opts)->
Req = cowboy_req:reply(200,#{
<<"content-type">>=><<"text/plain">>
},<<"Hello world!">>,Req),
{ok,Req,Opts}.
11.idea快捷启动配置,具体如图
Run in module需要取消勾选,然后apply->ok保存。
最后点击顶部栏的运行按钮便会自动下cowboy依赖并运行,最后访问浏览器http://localhost:8080/即可。
12.代码联想,idea默认只会联想erlang sdk中的代码和工程中我们自己写的代码,但是cowboy的代码却无法联想,解决办法有两种。一定要先运行起来项目,否者类库可能没有下载完。
第一:将找到rebar3下载的目录,将下载的库拷贝到erlang sdk中的lib目录,这种方式不推荐。
第二:设置idea项目,具体如下,File->Project Structure
然后选择1 Jars or Directories
最后点击ok,看清楚层级结构,这里的接口和idea中显示的层级结构不太一样,不要进入apps\cowboy_study\_build,
比如我的项目应该选择的目录是D:\code\erlangPreoject\cowboy_study\_build\default\lib
而不是D:\code\erlangPreoject\cowboy_study\apps\cowboy_study\_build\default\lib
由于我也是初学对rebar3这种项目结构也不太理解,也可能跟随版本不一样或者创建的项目命令不一样而不同,(我的是使用rebar new release xxx创建的),总之,找到cowboy在的父目录就行。
最后点击ok就可以联想和跳转代码了,但是这种方式只是个人找到的最好的方式。