备注:

*   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 学习四 如何进行项目结构规划的更多相关文章

  1. ballerina 学习二十六 项目docker 部署&& 运行(二)

    ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...

  2. spring学习(四) ———— 整合web项目(SSH)

    清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...

  3. ballerina 学习二十五 项目docker 部署&& 运行

    ballerina 官方提供了docker 的runtime,还是比较方便的 基本项目创建 使用cli创建项目 按照提示操作就行 ballerina init -i 项目结构 添加了dockerfil ...

  4. shiro基础学习(四)—shiro与项目整合

    一.认证 1.配置web.xml   2.配置applicationContext.xml      在applicationContext.xml中配置一个bean,ID和上面的过滤器的名称一致. ...

  5. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  6. 实验十四:团队项目评审&课程学习总结

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...

  7. ballerina 学习二十七 项目k8s部署&& 运行

    ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...

  8. 十一、Android学习第十天——项目开始(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...

  9. VUE2 第六天学习--- vue单文件项目构建

    阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...

随机推荐

  1. 【程序员笔试面试必会——排序②】Python实现 计数排序、基数排序

    一.计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的.计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序. 思路: ...

  2. 转载:Javascript面向对象编程原理 -- 理解对象

    源地址:http://www.html-js.com/article/1717 虽然JavaScript中已经自带了很多内建引用类型,你还是会很频繁的需要创建自己的对象.JavaScript编程的很大 ...

  3. hdu3544找规律

    如果x>1&&y>1,可以简化到其中一个为1的情况,这是等价的,当其中一个为1(假设为x),另一个一定能执行y-1次, 这是一个贪心问题,把所有的执行次数加起来比较就能得到 ...

  4. Python3 学习第十四弹: 模块学习六之re模块 + 正则表达式 (转)

    本文转自 AstralWind 的博客:Python正则表达式指南 特来收藏 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有 ...

  5. OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  6. Ubuntu相关命令

    此贴包含自己搭建网站以及自学Ubuntu遇到的相关命令,方便以后查看,故相关帖子整理记录在此! 用户切换 当前用户切换到root用户,只需要执行sudo su即可. root用户切回user用户,只需 ...

  7. oracle数据库简单的导入导出操作

    一.数据库导出 1.导出用户名/密码,,导出用户名为test_expdp.导出路径默认为oracle中的dpdump文件中 expdp test_expdp/test_expdp@orcl direc ...

  8. 二、DBMS_JOB(用于安排和管理作业队列)

    1.概述 作用:用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务注意:当使用DBMS_LOB管理作业时,必须确保设置了初始化参数job_queue_processes( ...

  9. 转:SQL Server服务器名称与默认实例名不一致的修复方法

    --原因分析: --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息. --ServerName 属性提供Windows 服务器和实例名称,两 ...

  10. 【dlbook】正则化

    对学习算法的修改——旨在减少泛化误差而不是训练误差 显著减少方差而不过度增加偏差. [参数范数惩罚] 通常只对权重做惩罚而不对偏置做惩罚,原因是拟合偏置比拟合权重容易很多. 不同层使用不同惩罚的代价很 ...