【问题标题】:Dynamically loading jar from arbitrary url从任意 url 动态加载 jar
【发布时间】:2015-09-11 14:03:19
【问题描述】:

最近 AWS Lambda 增加了对 Java 的支持。
虽然这是个好消息,但这对代码的大小(压缩 50MB)有一个非常严格的限制。虽然这对于其他语言可能没问题,但 Java uberjars 可以轻松击败它。

所以我一直在考虑让一个小型装载机在运行时从其他地方拉入一个更大的罐子。 (暂时搁置这是否是个好主意)。

从我最初的研究看来,自定义类加载器是要走的路。这对于 AWS Lambda 来说可能是不行的。

还有其他创造性的方法可以实现吗?

【问题讨论】:

    标签: java amazon-web-services aws-lambda


    【解决方案1】:

    我认为ClassLoader,更准确地说是URLClassLoader,是可行的方法,我不知道有任何其他解决方案可以在运行时加载代码。

    类加载器甚至不必是自定义的。它只需要几行代码即可工作,如this post 所示。

    如果您将加载的 jar 文件为您的应用程序提供特定服务,请考虑使用方便的 ServiceLoader。它的工作原理相同(实际上,您可以直接将ClassLoader 传递给它),但它使从动态加载的库中实例化对象变得透明。否则,您将不得不使用以下方式弄脏您的手:

    Object main = loader.loadClass("Main", true).newInstance();
    

    【讨论】:

    • 这可以试一试吗?我已经阅读了其他线程,我可以发誓 ClassLoader 不适用于 Lambda。让我们看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2015-05-11
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2014-12-29
    相关资源
    最近更新 更多