Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vangie/oversize-java-example
函数计算 Java 大项目模板
https://github.com/vangie/oversize-java-example
Last synced: about 6 hours ago
JSON representation
函数计算 Java 大项目模板
- Host: GitHub
- URL: https://github.com/vangie/oversize-java-example
- Owner: vangie
- Created: 2019-09-19T12:55:32.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-06-17T02:30:34.000Z (over 2 years ago)
- Last Synced: 2023-03-28T00:50:08.227Z (over 1 year ago)
- Language: Java
- Size: 259 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 函数计算 Java 大项目模板
本项目模板用于支持打包后大于 50 M 的 java 项目。其工作原理是将 pom.xml 内声明的第三方 jar 包拷贝到 nas 目录,然后通过自定义的 Classloader 从 nas 目录装载这些 Jar 包 。
## 初始化
```bash
fun init vangie/oversize-java-example
```文件说明
```bash
$ tree src/main/java
src/main/java
└── example
├── App.java
└── Entrypoint.java1 directory, 2 files
```Entrypoint.java 文件是入口文件,该文件会负责装载 App 类。开发者只需要在 App.java 文件中添加业务逻辑即可。
## 工作原理
函数默认的 Classloader 首先会装载 Entrypoint 类,然后 Entrypoint 类去装载其他类的时候会用自己的 Classloader(Entrypoint.class.getClassloader),而这个 classloader 不包含 NAS 目录的,也就没有办法装载到放置在 NAS 目录下的 jar 包。
所以我们这里首先创建一个新的 ChildFirstURLClassLoader,类如其名,会优先自己加载 class,而不是双亲委派。然后将 App 类通过 Class.forName 的方式进行装载,给 Class.forName 指定我们新建的 ChildFirstURLClassLoader。这样后续的类装载其他类都会用新的 ClassLoader。
## 本地运行
```bash
fun build && fun local invoke
```## 部署
```bash
fun build && fun deploy
```## 参考
1. [开发函数计算的正确姿势 —— 使用 Fun NAS 管理 NAS 资源](https://yq.aliyun.com/articles/712700)
2. [开发函数计算的正确姿势 —— Fun 自动化 NAS 配置](https://yq.aliyun.com/articles/712693)
3. [Funcraft](https://github.com/alibaba/funcraft)
4. [Aliyun Serverless VSCode Extension](https://github.com/alibaba/serverless-vscode)