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