自定义Homebrew的Formula

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: 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
参考资料

Formula Cookbook

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2014/10/10/create-a-homebrew-formula/

发表评论