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 ...
随机推荐
- ElasticSearch + Canal 开发千万级的实时搜索系统【转】
公司是做社交相关产品的,社交类产品对搜索功能需求要求就比较高,需要根据用户城市.用户ID昵称等进行搜索. 项目原先的搜索接口采用SQL查询的方式实现,数据库表采用了按城市分表的方式.但随着业务的发展, ...
- Django框架数据库模型
博主最近开始优化之前的API接口自动化框架,这次打算使用django框架来完成 # -*- coding: utf-8 -*- from __future__ import unicode_liter ...
- IRC BOT原来是利用IRC下发C&C命令——在xx云环境遇到了,恶意软件开的是6666端口
Backdoor/IRC.RpcBot 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Backdoor/IRC.RpcBot是一些批处理文件.脚本文件和执行文件的集合,也是 ...
- 双系统下ubuntu不能访问658GB卷,磁盘挂载失败。
win10+ubuntu双系统出现以下错误: Error mounting /dev/sda5 at /media/captain/AC8CF85B8CF8218E: Command-line `mo ...
- Disruptor快速入门
在JDK的多线程与并发库一文中, 提到了BlockingQueue实现了生产者-消费者模型 BlockingQueue是基于锁实现的, 而锁的效率通常较低. 有没有使用CAS机制实现的生产者-消费者? ...
- Shell脚本编写规范
shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...
- iOS开发:MKMapView地图内存持续增加的释放解决办法
内存持续增加的释放解决办法 最近修改一个用到MKMapView的项目,内存一直占用过多,每次拖拽地图时还会增加占用,且一直无法释放. 经过两天的排查,最后锁定是创建的self.map对象在加载地图的时 ...
- LINUX系统下CIFS文件系统
一.什么是CIFS CIFS(Common Internet File System)文件系统,也叫通用网络文件系统:它可以使一台主机访问远程主机上共享出去的文件.CIFS使用的C/S模式(客户 ...
- Java之引用类型分析(SoftReference/WeakReference/PhantomReference)
引言: 即使对于Java的很多老鸟来说,如果忽然问他引用的类型,大概率是一脸茫然,不知所措的-.Java中的引用还分类型,神马情况??? 本文将针对这些类型进行分析,帮助您一文知所有类型. Java的 ...
- Okhttp之RealConnection建立链接简单分析
在之前的博客中我们知道Okhttp在发起链接请求先从链接池中获取连接,如果链接池中没有链接则创建新的链接RealConnection对象,然后执行其connet方法打开SOCKET链接(详见< ...