本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2014/10/10/create-a-homebrew-formula/
Homebrew是Mac Os X系统下一个非常优秀的软件包管理工具。使用包管理工具的优势就是省心,不再需要在网页上下载安装或者下载后解压再配置环境变量了,只需要使用brew install就可以完成安装了。
Homebrew支持很多热门的应用和软件,而每一个支持都是一个.rb文件提供的,成为Formula。
虽然官方支持上千种Formula,但是总有需要自己自定义的时候。
本文以Moco为例子,创建一个Formula。
基本内容
Moco提供了一个命令行的jar,这也是最简单的情况,我们不需要下载编译,而是直接下载,然后链接就行了。
我们需要的是一个standalone的jar包,版本是0.9.2,地址在这里。
首先创建一个Formula,运行命令行brew create moco
,编辑生成的moco.rb
文件,添加内容
require"formula"
class Moco < Formula
homepage"https://github.com/dreamhead/moco"
url"http://central.maven.org/maven2/com/github/dreamhead/moco-runner/0.9.2/moco-runner-0.9.2-standalone.jar"
sha1"a21445d7b275c48874ed7756477ade74de299e17"
def install
libexec.install"moco-runner-0.9.2-standalone.jar"
bin.write_jar_script libexec/"moco-runner-0.9.2-standalone.jar","moco"
end
end
这是一个基本的情况,我们下载对应地址的jar包,然后用命令moco链接。
完成后运行brew install moco
就可以看到效果。
添加测试
Homebrew提供了测试方法以测试Formula的可靠性,最简单的就是调用--help
或者--version
命令行。
require"formula"
class Moco < Formula
homepage"https://github.com/dreamhead/moco"
url"http://central.maven.org/maven2/com/github/dreamhead/moco-runner/0.9.2/moco-runner-0.9.2-standalone.jar"
sha1"a21445d7b275c48874ed7756477ade74de299e17"
def install
libexec.install"moco-runner-0.9.2-standalone.jar"
bin.write_jar_script libexec/"moco-runner-0.9.2-standalone.jar","moco"
end
testdo
system bin/"moco","--help"
end
end
运行brew test moco
可以看到效果。
更复杂的测试
单单是打印一个版本或者帮助信息确实太少了。
在Moco的官网有一个简单的例子,启动一个返回Hello,Moco的服务。测试依照此修改为启动Moco,然后访问对应的网址获取信息,对比信息是否为Hello,Moco。
调用ruby中的net/http
来获取信息。
require"formula"
require'net/http'
class Moco < Formula
homepage"https://github.com/dreamhead/moco"
url"http://central.maven.org/maven2/com/github/dreamhead/moco-runner/0.9.2/moco-runner-0.9.2-standalone.jar"
sha1"a21445d7b275c48874ed7756477ade74de299e17"
def install
libexec.install"moco-runner-0.9.2-standalone.jar"
bin.write_jar_script libexec/"moco-runner-0.9.2-standalone.jar","moco"
end
testdo
port=12306
(testpath/'config.json').write <<-TEST_SCRIPT.undent
[
{
"response":
{
"text":"Hello, Moco"
}
}
]
TEST_SCRIPT
startMoco=Thread.newdo
system(bin/"moco","start","-p", port,"-c",(testpath/'config.json'))
end
sleep5#wait moco start
actualResponse=Net::HTTP.get(URI('http://localhost:'+port.to_s))
if(actualResponse!='Hello, Moco')
onoe"Error! The response is not right."
end
startMoco.exit
end
end
运行的效果可以查看这里Pull Request #32742
参考资料
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2014/10/10/create-a-homebrew-formula/