java - 是否有一个类似于 Ivy 的动态 java 类级解析器?

标签 java dynamic dependencies ivy

这更多的是关于解决诸如 Ivy 之类的工具的问题,以及 future 的方向。有没有什么可以提到包的类级依赖项,而不是包级依赖项?
例如,假设我有一个 apache-xyxy 包,它附带一个 ivy.xml,其中列出了它的所有依赖项。但假设我只在 apache-xyxy 中使用类 WX ,它不需要大部分依赖项。解析器不能智能并识别类 WX 只能调用其他类集(AB、DC、EF),并且这些类都不使用任何其他依赖项,以创建所需依赖项的最小子集?这比选择性删除一些由于该包中使用的特定类而不需要的包依赖项更容易、更安全,并且还可以防止仅仅因为这个原因将多个较大的包分解为较小的包。

然后,如果我后来决定使用 apache-xyxy 中的 GH 类,我可以进行 ivy 解析,它会动态引入其他所需的库。

最佳答案

当打包已编译的 Java 代码进行分发时,通常的做法是将 Java“包”捆绑在一起。将 java 包拆分为多个 jar 也是很有可能的(但很愚蠢)。大型框架(例如 Spring)在不同的 jar 中包含许多子包,以便用户可以在运行时选择他们需要的内容......当然,jar 选项越多,填充就越复杂运行时类路径...

这里的关键字是“运行时”......像Apache ivy这样的工具和 Apache Maven主要设计用于管理构建时所需的依赖项......

Apache Maven确实有一个“运行时”范围,因为它的依赖项,但它仅限于单个 jar 列表。通常,此范围用于确定测试和填充 WAR 文件的 lib 目录所需的 jar。

Apache ivy有一个类似的更灵活的机制,称为“配置”。可以根据需要创建任意数量的运行时配置,这些配置可用于决定 ivy 下载哪些 jar。 因此,虽然 ivy 似乎有答案,但我很少看到在启动程序时使用 ivy(唯一的异常(exception)是 Groovy 的 Grape annotations )

那么,您可能会问,答案是什么?

“运行时”类路径管理的 future 是 OSGIproject jigsaw 。我更熟悉 OSGI,其中在 jar 文件的 list 中添加了特殊的依赖项指示符,说明它的依赖项是什么。这个想法是,当容器加载 jar(称为“bundle”)时,它可以检查并查看其他依赖项是否已加载。可以从公共(public)存储库检索和加载这些依赖项。这是启动 java 的根本不同方式。传统上,每个应用程序都加载到它自己的隔离类路径中......

时间会证明这两个项目是否会流行。同时我们使用Apache ivyApache Maven构建独立且可能过度膨胀的 WAR(EAR 等)包。

关于java - 是否有一个类似于 Ivy 的动态 java 类级解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421036/

相关文章:

java - 如何在 webdriver 中使用 Xpath 通过精确文本匹配搜索节点

java - 根据键和值对映射进行排序

java - equals() 方法如何在 Java 中工作

java - 从java应用程序动态构建oracle sql查询

java - 包P1和P2有依赖循环,但是P1的类没有使用P2(通过jdepend分析)

Perl 电子邮件依赖项

java - try/catch block 捕获异常有什么意义?

c# - 为什么动态 IEnumerable 上的 First() 或 ElementAt() 是可等待的?

java - 调整包含 JSVGCanvas 的 JComponent 大小时出现 Batik IllegalStateException

java - Maven2 : Renaming provided dependecies at package phase?