前言

Giter8是一个用来生成scala项目模板的工具。

在之前scalatra的介绍中我们提到过giter8,这里就再往前迈一步,讲解giter8的基础使用方法。

官网:http://www.foundweekends.org/giter8/index.html

由于众所周知的网络问题,部分操作可能需要科学上网。

准备工作

你可以先尝试直接安装,如果不行再尝试下面开启代理的方法

部分包的下载需要开启代理,而这需要对下载命令配置代理,这里使用的是proxychains-ng

这个名字的品味令人无语,ng next/new generation,我一开始还以为是no good。作者是不打算出3了?要不然叫 nng (ˉ▽ˉ;)...
1
2
3
4
5
6
7
8
9
10
11
12
# proxychains的下载
$ git clone https://github.com/rofl0r/proxychains-ng.git
$ cd proxychains-ng

# 设置安装位置和配置文件存放位置
$ ./configure --prefix=/root/bin/proxychains-ng --sysconfdir=/etc
$ make && make install-config
$ cp proxychains4 /root/bin/proxychains-ng/


# 修改配置文件
$ vim /etc/proxychains.conf

将最后一行的配置修改为 socks5 <ipv4-address> <proxy-port>

  • sock5, 使用的协议名称
  • ipv4-address, 开启代理服务器的ip地址
  • proxy-port, 设置的代理端口

这里我使用的是本地代理,没有设置用户名和密码,端口选择的是1080,也就是说,我写的是

socks5 127.0.0.1 1080

下面是我为了方便个人使用配置的路径,可以按自己喜好随意修改。

1
2
3
$ vim ~/.bashrc
export PATH=/root/bin/proxychains-ng/bin:$PATH
$ source ~/.bashrc
1
2
3
# Proxychains简单示例
$ proxychains4 ping google.com
PING google.com(hkg07s30-in-x0e.1e100.net (2404:6800:4005:811::200e)) 56 data bytes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 首先安装giter8的依赖conscript
$ curl https://raw.githubusercontent.com/foundweekends/conscript/master/setup.sh >> setup.sh
$ proxychains4 sh setup.sh

# 使用conscript安装giter8
# 直接安装时不需要`proxychains4`
$ cs foundweekends/giter8

# 验证g8安装
$ g8
# g8的使用方法如下
Error: Missing argument <template>
g8 0.12.0-M1
Usage: g8 [options] <template>

<template> git or file URL, or github user/repo
-b, --branch <value> Resolve a template within a given branch
-t, --tag <value> Resolve a template within a given tag
-d, --directory <value> Resolve a template within a given directory
-o, --out <value> Output directory
-f, --force Force overwrite of any existing files in output directory
--version Display version number
--paramname=paramval Set given parameter value and bypass interaction

EXAMPLES

Apply a template from github
g8 foundweekends/giter8

Apply using the git URL for the same template
g8 git://github.com/foundweekends/giter8.git

Apply template from a remote branch
g8 foundweekends/giter8 -b some-branch

Apply template from a remote tag
g8 foundweekends/giter8 -t some-tag

Apply template from a directory that exists in the repo
g8 foundweekends/giter8 -d some-directory/template

Apply template into an output directory
g8 foundweekends/giter8 -o output-directory

Apply template from a local repo
g8 file://path/to/the/repo

Apply given name parameter and use defaults for all others.
g8 foundweekends/giter8 --name=template-test

构建自定义模板

git8官方推荐使用CC0的协议,这样别人可以引用你的模板而不用担心侵权问题(当然你也可以选择其他License)

模板的布局有两种

  • src layout: 存在src/main/g8
  • root layout: 不属于上一种情况时

这里以src layout为例

要想创建模(di)板(gui),先要创建模(di)板(gui)

启动新模板项目的简单方法是使用专门为此目的制作的Giter8模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ g8 foundweekends/giter8.g8

name [My Template Project]: g8test.g8
giter8_version [0.12.0-M1]:
sbt_version [1.2.8]:

Template applied in /root/tmp/./gtest

$ cd g8test.g8
# 建立好的模板项目,目录结构如下
$ tree
.
├── README.markdown
├── build.sbt
├── project
│   ├── build.properties
│   └── plugins.sbt
└── src
└── main
└── g8
├── build.sbt
├── default.properties
├── project
│   └── build.properties
└── src
└── main
└── scala
└── Stub.scala

default.properties使用Java属性文件的格式来定义模板字段其默认值。

1
2
3
$ cat src/main/g8/default.properties 
name=My Something Project
description=Say something about this template.

当你用这个模板新建项目时就会用到这里定义的字段。

g8模板的默认存取位置为github。

我们可以先试着把这个模板丢到github上去,再下下来看看效果听起来咋这么无聊呢

省略在github上创建仓库的步骤,仓库命名建议以.g8为后缀

1
2
3
4
5
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/counter2015/g8test.g8.git
$ git push -u origin master

换个目录再把它下下来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cd ..
$ g8 counter2015/g8test.g8
name [My Something Project]: step1
$ cd step1

$ tree
.
|-- build.sbt
|-- project
| `-- build.properties
`-- src
`-- main
`-- scala
`-- Stub.scala

可以看出,我们从模板中生成的程序,正是g8test.g8中目录src/main/g8下的文件(除了default.properties)

还能看出,My Something Project的交互提示,正是src/main/g8/default.properties的内容

下面来尝试使用default.properties,里面使用的技术有:

我们暂且不需要关心其中的细节

我们先返回最开始的目录,修改g8test.g8项目中的default.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ cd g8test.g8
# 修改部分属性
$ vim src/main/g8/default.properties
name=step2
description=a simple project
words=Hello giter8!


$ git add -A
$ git commit -m "modify some properties"

$ vim src/main/g8/src/main/scala/Stub.scala
object Main {
def main(args: Array[String]): Unit = {
println($words$)
}
}


$ mv src/main/g8/src/main/scala/Stub.scala src/main/g8/src/main/scala/Main.scala

$ git add -A
$ git commit -m "modify a scala file"

$ git push

准备完成,我们重新试下有什么变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ g8 counter2015/g8test.g8
name [step2]:
words [Hello giter8!]: "hi, there!"

$ cd step2
$ sbt run
hi, there!

$ cat src/main/scala/Main.scala
object Main {
def main(args: Array[String]): Unit = {
println("hi, there!")
}
}

Notes:

  • description字段暂时还无法使用
  • 暂不支持对文件名使用模板,如src/main/scala/$classname$.scala,这种会直接报错

总结

花了5小时将原来20分钟的事情简化到了2分钟

5*60/18≈12