ballerina 学习四 如何进行项目结构规划
备注:
* ballerina 程序员可以将代码放到一个文件或者一个项目目录
* 一个ballerina program是一个已经编译以及链接的二进制文件
* package是一个包含ballerina 源码文件的目录
* repository是一个版本化的已经编译或者源码
* project自动管理包以及程序的集合
1. program
程序是运行时可执行的,以balx 为扩展名,程序包必须包含一个main() 函数(一个进程的进入点),或者一个service (网络可访问的api)
参考(包含一个main 以及service demo.bal):
import ballerina/http;
import ballerina/io;
function main (string... args) {
io:println("Hello, World!");
}
service<http:Service> hello bind { port: 9090 } {
sayHello (endpoint caller, http:Request req) {
http:Response res = new;
res.setPayload("Hello, World!");
_ = caller->respond(res);
}
}
运行:
ballerina run demo.bal 如何只包含service 可以使用
ballerian run -s demo.bal
构建:
ballerina build demo.bal
2. package
包可以实现共享,以及重用
包具有以下特点:
a. 可以有一个可选的版本
b. 但是没有版本的包是不能发布到一个仓库实现代码的共享
c. 包的使用是以 org-name/package-name 格式引用的,org-name在仓库中做为命名空间
包的导入格式:
import [<org-name>]/<package-name> her.package [ [version <string>] [as <identifier>] ];
最后一个包的名称,或者距离最近一个.的字符串为包的标示,可以用来进行包中服务或者共享函数的使用,同时可以
使用as 进行别名命名
比如:
import ballerina/http; http: 做为标示符
import tyler/net.http.exception exception: 做为标示符
参考代码:
import ballerina/http;
# The 'Service' object comes from the imported package.
service<http:Service> hello bind { port:9090 } {
# The 'Request' object comes from the imported package.
sayHello (endpoint caller, http:Reqeust req) {
...
}
}
import ballerina/http as network;
service<network:Service> hello bind { port:9090 } {
# The 'Request' object comes from the imported package.
sayHello (endpoint caller, network:Reqeust req) {
...
}
}
包的版本依赖:
如下,如果没有使用的是latest
import tyler/http version 3.0.1;
导入不同版本的包
import tyler/http version 3.0.1 as identity3;
import tyler/http version 4.5.0 as identity4;
function main(string... args) {
identity3:Person x = identity3:getPerson();
identity4:Person y = identity4:getPerson();
}
3. project
project 具有如下特点:
* 一个project 是一个目录自动会进行包以及程序的管理
* 同时包含一个用户管理清单文件 Ballerina.toml
* 一个托管的.ballerina/文件实现元数据以及cache
* project 的repository进行以来的存储
a. 创建project
ballerina init -i 按照提示操作即可
b. 创建一个包
每一个根目录子目录都是一个单独的包,子目录名称就是包的名称
.ballerina/, tests/, and resources/ 做为保留目录,不会做为包
一个参考的结构
/
.gitignore
Ballerina-lock.toml # Generated during build, used to rebuild identical binary
Ballerina.toml # Configuration that defines project intent
.ballerina/ # Internal cache management and contains project repository
# Project repository is built or downloaded package dependencies
main.bal # Part of the “unnamed” package, compiled into a main.balx
# You can have many files in the "unnamed" package, though unadvisable
package1/ # The source in this directory will be named “<org-name>/package1”
Package.md # Optional, contains descriptive metadata for display at Ballerina Central
*.bal # In this dir and recursively in subdirs except tests/ and resources/
[tests/] # Package-specific unit and integration tests
[resources/] # Package-specific resources
*.jar # Optional, if package includes native Java libraries to link + embed
packages.can.include.dots.in.dir.name/
Package.md
*.bal
*.jar
[tests/]
[resources/]
*.jar # Optional, if package includes native Java libraries to link + embed
[tests/] # Tests executed for every package in the project
[resources/] # Resources included with every package in the project
target/ # Compiled binaries and other artifacts end up here
main.balx
package1.balo
packages.can.include.dots.in.dir.name.bal
c. 构建一个project
ballerina build
d. 构建一个包
ballerina build package-name
4. repository
仓库是包的集合,仓库帮助团队或者组织进行管理他们代码的版本以及资源
存在四类仓库:
a. project 仓库,这个是本地的在 ./ballerina 文件夹
b. home 仓库这个目录在开发者的本地
c. system 仓库 一个特殊的仓库,包含在ballerian 的分发包中,主要是ballerian 的一个核心包
d. ballerina 中心仓库,http://central.ballerina.io
仓库的操作:
ballerina install
ballerina push --repository=home
ballerina pull <org-name>/<package-name>[:<version>] [--repository=<url>] (remote)
ballerina push <org-name>/<package-name>:<version> [--repository=home|url](remote)
ballerina remove <org-name>/<package>:<version> [--repository=home|<url>]
5. 参考资料
https://ballerina.io/learn/how-to-structure-ballerina-code/
ballerina 学习四 如何进行项目结构规划的更多相关文章
- ballerina 学习二十六 项目docker 部署&& 运行(二)
ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...
- spring学习(四) ———— 整合web项目(SSH)
清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...
- ballerina 学习二十五 项目docker 部署&& 运行
ballerina 官方提供了docker 的runtime,还是比较方便的 基本项目创建 使用cli创建项目 按照提示操作就行 ballerina init -i 项目结构 添加了dockerfil ...
- shiro基础学习(四)—shiro与项目整合
一.认证 1.配置web.xml 2.配置applicationContext.xml 在applicationContext.xml中配置一个bean,ID和上面的过滤器的名称一致. ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- 实验十四:团队项目评审&课程学习总结
项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...
- ballerina 学习二十七 项目k8s部署&& 运行
ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...
- 十一、Android学习第十天——项目开始(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...
- VUE2 第六天学习--- vue单文件项目构建
阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...
随机推荐
- IIS优化整理
IIS 之 在IIS7.IIS7.5中应用程序池最优配置方案 找到Web站点对应的应用程序池,“应用程序池” → 找到对应的“应用程序池” → 右键“高级设置...” 一.一般优化方案 1.基本设置 ...
- [洛谷U63006]导函数最小系数
U63006 导函数最小系数 题面 给出一个n次函数\(f(x)=a_{n}x^{n}+a_{n-1}x^{n-1}+...+a_{1}x+a_0\)的各项系数\(a_n,a_{n-1}...a_1, ...
- 设计模式--享元模式C++实现
1定义 使用共享对象可有效的支持大量细粒度的对象 2类图 角色分析 Flyweight抽象享元角色,一个产品的抽象,定义内部状态和外部状态的接口或者实现 ConcreteFlyweight具体享元角色 ...
- Java获取未知类型对象的属性
获取未知类型对象的属性通常有两种方式: 一是通过自定义注解的方式,通过获取被注解的属性从而获取属性的值,这种方式也是Spring参数注入的重要实现手段 二是通过反射获取属性的名称,通过属性名从而获取属 ...
- 使用群晖NAS:配置Git server
1.首先在群晖的DSM的控制面板中创建一个用户例如是Git_test(我给了管理员权限) 2.在套件中心安装 Git server 3.打开Git server 勾选用户 Git_test 4.在控制 ...
- 极简MarkDown教程(常用样式)
推荐编辑软件,NotePad++ & MarkDownViewer++(插件),以下内容为MarkDown格式,可自行放到编辑软件中查看,或在线查看 #### . 标题 > 用#+空格开 ...
- LeetCode OJ:Implement Trie (Prefix Tree)(实现一个字典树(前缀树))
Implement a trie with insert, search, and startsWith methods. 实现字典树,前面好像有道题做过类似的东西,代码如下: class TrieN ...
- 消除浏览器对input输入框的自动填充
Mozilla官方文档建议的是 直接使用 autocomplete = ‘off’ 即可禁止输入框从浏览器cache获取数据,博主以前使用这个也就足够兼容浏览器了. 现在发现,却在chrome.fir ...
- Eclipse快捷键详细解析
android开发中常用的Eclipse快捷键详细解析 1.查看快捷键定义的地方 Window->Preferences->General->Keys. 2.更改启动页 在Andro ...
- D3.js 使用心得
教程 D3.js 入门教程系列 http://www.ourd3js.com/wordpress/296/ 全球地图数据