有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

是否有动态java类级Ivylike解析器?

这更多的是一个关于解决工具(如^{)的问题,以及未来的方向。是否有任何东西可以提及包的class-level依赖项,而不是package level依赖项
例如,假设我有一个apache-xyxy package,它附带一个ivy.xml,列出了它的所有依赖项。但是假设我只在ApacheXYXY中使用类WX,它不需要大多数依赖项。冲突解决程序不能是智能的,并且确定类WX只能调用其他类的集合(AB、DC、EF),并且这些类都不使用任何其他依赖项来创建所需依赖项的最小子集吗?这将比cherry picking更容易、更安全地删除一些由于包中使用的特定类而不需要的包依赖项,并且还可以防止仅仅因为这个原因将几个较大的包分解为较小的包

然后,如果我后来决定使用ApacheXYXY中的GH类,我可以进行ivy解析,它将动态地引入额外的必需库


共 (1) 个答案

  1. # 1 楼答案

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

    这里的关键字是“运行时”。。。。像Apache ivyApache Maven这样的工具主要是为了管理构建时所需的依赖关系而设计的

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

    Apache ivy有一种类似的更灵活的机制,称为“配置”。您可以根据需要创建尽可能多的运行时配置,这些配置可用于确定哪些JAR由ivy下载。 因此,虽然看起来常春藤有答案,但我很少看到在启动程序时使用常春藤(Groovy的Grape annotations是一个例外)

    那么,你可能会问,答案是什么

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

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