You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 rivejä
3.0 KiB

10 vuotta sitten
  1. ## Why Rebar3?
  2. Rebar was a great step forward for Erlang development but with time has proven to be fragile to change. Rebar3 builds on certain components of rebar which have benefited from years of community collaboration within a new core which is more extendable.
  3. ## Creating a New Project
  4. ```shell
  5. $ rebar3 new rel myrelease
  6. ===> Writing apps/myrelease/src/myrelease_app.erl
  7. ===> Writing apps/myrelease/src/myrelease_sup.erl
  8. ===> Writing apps/myrelease/src/myrelease.app.src
  9. ===> Writing rebar.config
  10. ===> Writing relx.config
  11. ===> Writing config/sys.config
  12. ===> Writing config/vm.args
  13. ===> Writing .gitignore
  14. ===> Writing LICENSE
  15. ===> Writing README.md
  16. ```
  17. ## Working on an Existing Rebar3 Project
  18. First, checkout the project and change directories to the project root.
  19. ```shell
  20. $ git clone git://github.com/tsloughter/minansan.git
  21. $ cd minansan
  22. ```
  23. Now we can use rebar3 to fetch all dependencies and build both the dependencies and the project app or apps.
  24. ```shell
  25. $ rebar3 compile
  26. ===> Fetching gproc
  27. Cloning into '.tmp_dir109479658516'...
  28. ===> Fetching ranch
  29. Cloning into '.tmp_dir725384773580'...
  30. ===> Fetching cowboy
  31. Cloning into '.tmp_dir285325769000'...
  32. ===> Fetching cowlib
  33. Cloning into '.tmp_dir924054839613'...
  34. ===> Compiling gproc
  35. /home/tristan/Devel/minasan/_deps/gproc/src/gproc_dist.erl:23: Warning: behaviour gen_leader undefined
  36. ===> Compiling cowlib
  37. ===> Compiling ranch
  38. ===> Compiling cowboy
  39. ===> Compiling minasan
  40. ```
  41. ## Adding Dependencies
  42. Dependencies are listed in `rebar.config` file under the `deps` key:
  43. ```erlang
  44. {deps, [
  45. {cowboy, ".*", {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.0"}}}
  46. ]}.
  47. ```
  48. Then you'll most likely want to add the dependency to one of your project's application's `.app.src` file under applications.
  49. ## Rebar3 Conventions
  50. Rebar3 is entirely based on building OTP applications and releases.
  51. * Directories starting with underscores, e.g. `_deps`, are expected to not be checked in version control.
  52. * Project apps you are working on exist under `apps/` or `lib/`, or is a single app project with `src/` in the root directory.
  53. * `rebar.lock` and `rebar.config` go in the root of the project.
  54. * Tests go in `tests/`.
  55. ## rebar.config vs rebar.lock
  56. `rebar.lock` contains the exact reference id to a commit that was used to build the project. Committing this file allows you to specify a branch in `rebar.config` for a dependency and still have reproducable builds because if the `rebar.lock` file exists when a rebar3 project is being built the contents of deps in rebar.config are ignored.
  57. ## Checkout Dependencies
  58. ## Tests
  59. Rebar3 has the concept of test dependencies. These dependencies will only be fetched when a rebar3 command that runs tests is run by the user.
  60. ```erlang
  61. {test_deps, [
  62. {meck, ".*", {git, "https://github.com/eproxus/meck.git", {tag, "0.8"}}}
  63. ]}.
  64. ```
  65. ```shell
  66. $ rebar ct
  67. ===> Fetching meck
  68. Cloning into '.tmp_dir772710363032'...
  69. ===> Compiling meck
  70. ===> Compiling minasan
  71. ```