[Elixir003] Mix Archives
在[Elixir001]中使用 mix escript.build 生成一个lifelog 的escript启动脚本。
今天我们尝试一下另一种方式:生成Archives。
我们先添加一个Task
1. 查看下我们现在有那一些task.
这个命令非常有用,:)
> mix help
mix # Runs the default task (current: "mix run")
mix app.start # Starts all registered apps
mix archive # Lists all archives
mix archive.build # Archives this project into a .ez file
mix archive.install # Installs an archive locally
mix archive.uninstall # Uninstalls archives
mix clean # Deletes generated application files
.....
2. 创建项目自定义的Task.
> mkdir -p lib/mix/tasks #一般都是放在lib/mix/tasks下的!
>emacs lib/mix/tasks/lifelog.start.ex # 一般都是以.分隔的!
defmodule Mix.Tasks.Lifelog.Start do
use Mix.Task
@shortdoc "Start logging" @moduledoc """
Manager your life.
""" def run(args) do
{ _opts, args, _ } = OptionParser.parse(args) # 把命令行的args parse成可以使用的args
Mix.Tasks.App.Start.run(args) #要先把application先启动
LifeLog.CLI.main(args)
end
end
现在我们可以在当前目录下运行
> mix lifelog.start #在项目当前目录下
成功打开录入界面!!!!!!! ,但是如果在别的目录下呢?
3. 构建archive
现在我们如果不在项目的root目录下运行
> mix lifelog.start
** (Mix) The task "lifelog.start" could not be found
根本找不到我们的这个task,因为我们还没有安装对应的archive,这个命令可以在上面的步骤1看到说明,我们只需要按说明来生成一个archive就行
> mix archive #查看当前install了什么archive
* hex-0.11.1.ez
Archives installed at: /Users/zhongwen/.mix/archives > mix archive build #它会生成一个App-Version.ez文件
Compiled lib/mix/lifelog.start.ex
Generated archive "lifelog-0.0.1.ez" with MIX_ENV=dev > mix archive.install lifelog-0.0.1.ez
Are you sure you want to install archive "lifelog-0.0.1.ez"? [Yn] y
* creating /Users/zhongwen/.mix/archives/lifelog-0.0.1.ez
> mix archive
* hex-0.11.1.ez
* lifelog-0.0.1.ez
Archives installed at: /Users/zhongwen/.mix/archives
mix archive build如果不指定文件名并且在当前目录有mix.exs文件的话,会根据它里面的app 和 version生成 App-Version.ez,
这下我们就可以到处运行
> mix lifelog.start

4.补充说明
以上已能完整的创建并安装一个archive啦,但是上面有一个比较有意思的函数,我们这个例子中并实际用到,但却是一个非常有用的函数!
Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> OptionParser.parse(["--debug"])
{[debug: true], [], []}
iex(2)> OptionParser.parse(["--source", "lib"])
{[source: "lib"], [], []}
iex(3)> OptionParser.parse(["--source", "lib", "test/test.exs", "--verbose"])
{[source: "lib", verbose: true], ["test/test.exs"], []}
它可以把命令行的参数args转化为一个keywords list.
更多详细的例子可以通过(doc里面的例子更加全面)
iex(4)> h OptionParser.parse
5.Resources
5.2 Mix.Tasks.Archive.Build Documentation
5.3 The Phoenix installer archive application 这个看上去也很棒!
5.4 以上提到的所有代码修改: 增加Task 并生成archive 启动
Loading up the process dictionary

[Elixir003] Mix Archives的更多相关文章
- Running Elixir in Docker Containers
转自:https://www.poeticoding.com/running-elixir-in-docker-containers/ One of the wonderful things abou ...
- VR ( Virtual Reality )、AR(Augmented Reality)、MR(Mix Reality)和CR(Cinematic Reality)是什么鬼?
整个社会对虚拟现实的研究和开发源于上个世纪六十年代,计算机图形学.人机接口技术.图像处理与模式识别.多传感技术.语音处理与音响技术.高性能计算机系统.人工智能等领域在之后半个世纪取得了长足的发展为虚拟 ...
- Mysql Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
MySQL字符串比较bug: select * from table_a a left join table_b b on a.field_a = b.field_b error: Illegal ...
- dpkg: 处理归档 /var/cache/apt/archives/软件名 (--unpack)时出错:由于已经达到 MaxReports 限制,没有写入 apport 报告。
一.环境介绍: OS:ubuntu16.04 64bit 二.错误如下: 正准备解包 .../libqt4-script_4%3a4.8.7+dfsg-5ubuntu2_i386.deb ...正在 ...
- 彻底解决phpcms v9升级后,文章发布出现: Mysql 1267错误:MySQL Error : Illegal mix of collations 解决办法
彻底解决phpcms v9升级后,文章发布出现: MySQL Query : SELECT * FROM `withli_a`.`v9_keyword` WHERE `keyword` = '吼吼' ...
- 从头开始学算法--NUM operation in MIX
从前往后,按照课本顺序刚刚看到MIX这部分.NUM是一个转换操作符,可以把字符编码转换为数字.它把registerA & registerX的值转换为数字并赋值给registerA.转换过程是 ...
- Mix and Build(简单DP)
Mix and Build Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3936 Accepted: 1203 Case Ti ...
- 个人博客实现Archives查询小记
这两天正在做博客,刚刚遇到一个问题,就是需要在主页实现文档分类功能,即通过日期将文章进行按日期进行分类. 比如这样的: 我个人的想法是,查询所有文章的日期,然后将日期进行格式化,只留下年份和月份,然后 ...
- PowerPoint Office Mix 插件
一个内嵌在PowerPoint里的一个教学工具,可以以PPT为核心录制视频. 点下面链接了解并安装 https://mix.office.com/ 首先这货是免费,当然是基于PowerPoint的基础 ...
随机推荐
- aix操作系统的版本中TL SP 含义
AIX 分为四个主要的操作系统级别:版本.发行版.技术级 (TL) 和服务包 (SP).版本和发行版通常指的是 AIX 的名称,例如AIX 7.1.TL 是包含重大更新的操作系统的发行版,而 SP 包 ...
- Requests抓取火车票数据
1.数据接口 https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-08-01&from_ ...
- eclipse Android 开发基础 Activity 窗体 界面
eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form. 新建Activity自动生成src下同名的java代码. pu ...
- Spring Boot 16 条最佳实践
Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...
- TNS:no listener error in Oracle XE after changing computer name
This morning at work when trying to log on to my computer I noticed not my username on login screen ...
- 记一次 .net core publish 之后找不到视图文件的问题
周末将VS从15.3 升级到15.5 ,之后又将VS版本由社区版,升级为企业版. 于是问题来了: 项目publish 之后找不到视图文件了??? 问题很是蛋疼,后来仔细想了一下,也没有动什么东西.查看 ...
- 迷你MVVM框架 avalonjs 学习教程7、数据缓存
jQuery的许多功能都可以通过avalon的绑定属性来处理,如click方法对应ms-click,css方法对应ms-css,toggle方法对应ms-visible,它的数据缓存功能avalon也 ...
- __stdcall详解
对_stdcall 的理解(上) 在C语言中,假设我们有这样的一个函数:int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用 ...
- 新手C#面向对象的学习2018.08.06
class Person//声明一个Person类 { //类中的声明与Main中不同,类中声明的是字段而不是函数. public string gender; public string name= ...
- 有道笔记链接地址 -----关于python
一.python相关 python列表的操作[list[]]: http://note.youdao.com/noteshare?id=93922f3174b1d8fac04514064656 ...