最近 AWS Lambda 增加了对 Java 的支持。
虽然这是个好消息,但这对代码的大小(压缩 50MB)有相当严格的限制。虽然这对于其他语言可能没问题,但 Java uberjars 可以轻松击败它。
所以我一直在玩弄一个小型装载机的想法,该装载机在运行时从其他地方拉入一个更大的罐子。(暂时搁置这是否是个好主意)。
从我最初的研究来看,自定义类加载器似乎是要走的路。这对 AWS Lambda 来说可能是不行的。
有没有其他创造性的方法可以实现?
最近 AWS Lambda 增加了对 Java 的支持。
虽然这是个好消息,但这对代码的大小(压缩 50MB)有相当严格的限制。虽然这对于其他语言可能没问题,但 Java uberjars 可以轻松击败它。
所以我一直在玩弄一个小型装载机的想法,该装载机在运行时从其他地方拉入一个更大的罐子。(暂时搁置这是否是个好主意)。
从我最初的研究来看,自定义类加载器似乎是要走的路。这对 AWS Lambda 来说可能是不行的。
有没有其他创造性的方法可以实现?
我认为ClassLoader
,更准确地说URLClassLoader
,是要走的路,而且我不知道在运行时加载代码的任何其他解决方案。
类加载器甚至不必是自定义的。如本文所示,它只需要几行代码即可工作。
如果您将加载的 jar 文件为您的应用程序提供特定服务,请考虑使用方便的ServiceLoader
. 它的工作原理相同(实际上,您可以直接将它传递 a ClassLoader
),但它使从动态加载的库中实例化对象变得透明。否则,你将不得不让你的手有点脏,使用类似的东西:
Object main = loader.loadClass("Main", true).newInstance();