【问题标题】:Dynamic loading of Maven artifacts at runtime在运行时动态加载 Maven 工件
【发布时间】:2012-10-24 19:03:31
【问题描述】:

在运行时,我的应用想要动态添加功能。我们希望能够从 Maven 存储库下载工件,将它们添加到类路径中,并在不重新启动应用服务器的情况下使用它们。可能吗?

我遇到过 Eclipse Aether,它提供对 Maven 存储库的编程访问。现在缺少的部分是动态类路径。

【问题讨论】:

  • 问题是你为什么需要那个?
  • 为了更轻松地跨机器集群部署代码。如果我可以将一个工件部署到一个 repo,然后向集群上的每台机器发送一个简单的命令来获取代码并开始使用它,那就太酷了。

标签: maven aether


【解决方案1】:

来自 Sonatype 的 Aether 正是您所需要的。尝试使用 jcabi-aether,它是 Aether 的包装器:

File repo = this.session.getLocalRepository().getBasedir();
Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);

您只需要知道远程 Maven 存储库的列表、本地存储库位置以及工件的 Maven 坐标即可。

【讨论】:

  • 这能解决类加载器问题吗?它会将工件添加到类加载器中,以便我可以在我的应用程序中使用它吗?
  • 不,它只是将 JAR 文件从网络加载到您的本地磁盘
  • 不回答这个问题,但以太是个好主意。 +1。
【解决方案2】:

如果您不反对使用商业产品,一种选择是LiveRebel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2016-04-14
    • 1970-01-01
    • 2017-11-21
    • 2020-09-14
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多