备注:

项目比较大, 模块比较多,一般使用mix 的方式是大家进行文件夹的划分,但是使用mix 的umbrella 可能会更方便

1. 安装

默认安装elixir 的时候已经包含了这个功能
2. 基本使用
a. 创建根项目

mix new <projectname> --umbrella  

生成的项目如下:

* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating apps
* creating config
* creating config/config.exs Your umbrella project was created successfully.
Inside your project, you will find an apps/ directory
where you can create and host many apps: cd opsplatform
cd apps
mix new my_app Commands like "mix compile" and "mix test" when executed
in the umbrella project root will automatically run
for each application in the apps/ directory. b. 添加子项目 cd <projectname>/apps 我的是opsplatform
cd opsplatform/apps/
mix new platformuserlogin
mix new platformrunnuer
mix new platformdao 项目代码结构如下: ├── apps
│   ├── platformdao
│   │   ├── config
│   │   ├── lib
│   │   └── test
│   ├── platformrunnuer
│   │   ├── config
│   │   ├── lib
│   │   └── test
│   └── platformuserlogin
│   ├── config
│   ├── lib
│   └── test
└── config d. 编译 mix compile # 根项目,进入子模块进行编译也是可以的 e. 模块引用(比如platformrunnuer 需要platformdao) 进入platformrunnuer 编辑 mix.exs defp deps do
[
# {:dep_from_hexpm, "~> 0.3.0"},
{:platformdao, in_umbrella: true}
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
# {:sibling_app_in_umbrella, in_umbrella: true},
]
end
3. 子模块说明
mix.exs

defmodule Platformdao.MixProject do
use Mix.Project # 处理引用的是根目录的,对于配置信息以及依赖可以方便的共享
def project do
[
app: :platformdao,
version: "0.1.0",
build_path: "../../_build",
config_path: "../../config/config.exs",
deps_path: "../../deps",
lockfile: "../../mix.lock",
elixir: "~> 1.6",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end # Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger]
]
end # Run "mix help deps" to learn about dependencies.
defp deps do
[
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
# {:sibling_app_in_umbrella, in_umbrella: true},
]
end
end
4. 扩展
一般来说我们在使用umbrella 的时候,同时会使用distillery && edeliver
一个负责构建,一个负责部署,还是比较方便的
5. 参考资料
https://hex.pm/packages/edeliver
https://hex.pm/packages/distillery
https://hexdocs.pm/mix/Mix.html
https://github.com/wojtekmach/acme_bank
 
 
 
 

elixir 使用mix umbrella 模块化项目的更多相关文章

  1. 在Android上编写模块化项目(翻译)

    来源博客:Wang Jie's Blog 本文链接:http://blog.wangjiegulu.com/2018/02/13/writing_a_modular_project_on_androi ...

  2. spring-boot 多模块化项目和EurekaServer的搭建

    Spring boot由于其 1.易于开发和维护.2.单个微服务启动快.3.局部修改部署容易.4.技术栈不受语言限制等优点受到越来越多公司的重视.spring-boot还集成了许多关于微服务开发的框架 ...

  3. 简单Elixir游戏服设计- 创建项目

    反正是写到哪算哪. 创建umbrella项目 mix new simple_game --umbrella 创建model项目 cd simple_game\apps mix new model 创建 ...

  4. gulp基于seaJs模块化项目打包实践【原创】

    公司还一直在延续使用jq+seajs的技术栈,所以只能基于现在的技术栈进行静态文件打包,而众所周知seajs的打包比较"偏门",在查了不少的文档和技术分享后终于琢磨出了自己的打包策 ...

  5. springboot之多模块化项目打包

    1.目录结构 2.打成war包,只需在web子项目中的pom文件中添加 <packaging>war</packaging> <build> <!-- 为ja ...

  6. go创建模块化项目

    比如我要创建一个xxx-system,里面可能有多个子模块,步骤如下: 1.mkdir xxx-system 2.cd xxx-system 3.在xxx-system目录下创建一系列的service ...

  7. elixir mix 简介

    概述 mix 是 elixir 工程的构建工具,利用 mix,可以快速方便的创建 elixir 工程,写单元测试,管理 elixir 包的依赖管理等等. 我觉得刚开始学习 elixir 的时候,先简单 ...

  8. laravel elixir

    npm install npm install jquery --save //bootsrap3.36 与 jquery3不兼容,下载jquery时可能需要确定版本号 npm install jqu ...

  9. elixir 集成ejabberd

    备注: 我开发测试的环境时centos 1. 预备环境 1. openssl yum install -y  openssl-devel 2. xml yum install -y expat-dev ...

随机推荐

  1. Dubbo本地开发技巧

    背景 作为后端服务负载.前后分离的主要手段,dubbo在业界中使用率还比较高.随着Dubbo系统的增多,本地开发.调试就出现了麻烦之处 直接在开发本地起同样一份服务 由于Dubbo采用负载均衡的策略, ...

  2. webapi在IIS发布后报Http 403.14 error

    服务器是Windows Server 2008 R2 Enterprise IIS6.1     解决方法,修改web.config文件   1.在<system.webServer>配置 ...

  3. 【zzuli-1626】又是A+B吗?

    题目描述 其实这个题本来应该是那道撼烁古今的A+B签到题,但LCC小王子一看不乐意了,说:“这么经典的题怎么能让别人做,我们要留着自己做,马上把这道题给我换了.”于是把原本经典的A+B签到题改成了现在 ...

  4. LeetCode OJ:Maximal Rectangle(最大矩形)

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  5. 文件目录tree显示,python

    #/usr/bin/python import os def travelTree(currentPath, count=0): if not os.path.exists(currentPath): ...

  6. 第2课:jmeter总结、Charles抓包

    1.  tps(throughput):每秒钟处理的事务数(请求数),定义与qps类似(qps:每秒完成的请求个数.)  响应时间(average):每个请求的平均响应时间 2. jmeter实现下载 ...

  7. 使用CGLib完成代理模式遇到的错误

    错误堆栈信息: Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type ...

  8. Linux:运行级别,root密码重置,救援模式,安装图形化界面

    运行级别,root密码重置,救援模式,安装图形界面 运行级别 1.查看当前系统的运行级别 runlevel 2.认识各个运行级别以及开机自启运行级别 Linux系统运行级别共7个执行 vi /etc/ ...

  9. cpu的用户态和内核态和内存的用户空间内核空间

    谈到CPU的这两个工作状态,也就是处理器的这两个工作状态,那我们有必要说一下为什么搞出这两个鬼玩意出来.       用过电脑的娃娃们肯定知道在一个系统中既有操作系统的程序,也由普通用户的程序.但那么 ...

  10. three.js入门系列之材质

    一.基础网孔材料 MeshBasicMaterial 图示(光源是(0,1,0)处的点光源): 二.深度网孔材料 MeshDepthMaterial (由于只是改了材料名,代码将不重复贴出) 在这里, ...