Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vangie/oversize-java-example

函数计算 Java 大项目模板
https://github.com/vangie/oversize-java-example

Last synced: about 6 hours ago
JSON representation

函数计算 Java 大项目模板

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.java

1 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)