Java Manifest.mf中的类路径定义是否覆盖或补充EAR中的库路径?

Java Manifest.mf中的类路径定义是否覆盖或补充EAR中的库路径?,java,jar,classpath,manifest,ear,Java,Jar,Classpath,Manifest,Ear,关于MANIFEST.MF中类路径的使用,我与另一个开发人员(以及经验证据)有不同的意见 我的/lib文件夹中有一只耳朵,里面有一堆罐子。在my application.xml中,我已将我的定义为/lib,但我认为这是默认设置/值 在我的根目录中,我有一个myejb.jar文件。在EJB中,我有一个MANIFEST.MF和一个类路径条目 因此,现在的问题是: 如果在EJB清单中找到类路径条目,那么类加载器是否仍然可以访问/lib中的所有jar/lib,即使它们没有在清单中显式指定 如果在清单中找

关于MANIFEST.MF中类路径的使用,我与另一个开发人员(以及经验证据)有不同的意见

我的/lib文件夹中有一只耳朵,里面有一堆罐子。在my application.xml中,我已将我的
定义为/lib,但我认为这是默认设置/值

在我的根目录中,我有一个
myejb.jar
文件。在EJB中,我有一个MANIFEST.MF和一个类路径条目

因此,现在的问题是:

  • 如果在EJB清单中找到类路径条目,那么类加载器是否仍然可以访问/lib中的所有jar/lib,即使它们没有在清单中显式指定
  • 如果在清单中找不到类路径条目,EJB是否可以访问/lib中的任何/所有JAR
  • 如果清单中指定的jar位置与/lib不同,它是否优先于/lib中的jar
  • 类加载器如何解决清单中存在非存在JAR项的问题
  • 所有这些规则是否都依赖于容器实现,或者这些规则是java规范的一部分(我在任何地方都找不到)

  • 部分问题是由于我使用的第三方EJB的清单写得很差(在根文件夹中查找lib、不存在的jar等)。因此,我可以重写清单,但是,我也质疑在有签名的EJB jar的情况下这将如何工作。我是否能够从清单中定义的位置移动依赖项库?

    不幸的是,类加载是为应用程序服务器类型指定的。 在大多数情况下是这样的。当服务器通过类路径在类中搜索ear时,它会遍历并搜索:

  • 在启动时从服务器拥有的JAR加载到内存中的类
  • 如果清单中没有指向不同的类路径,则WEB项目的WEB-INF中的类
  • 在lib文件夹中,如果已定义 现在我来回答你的问题:

  • 否,若jar不存在,将抛出ClassNotFoundException
  • 将引发ClassNotFoundException
  • 是的,这取决于不同的服务器。不同的服务器试图以不同的方式优化加载过程,因此我们有一些项目部署和工作的人工制品

  • 如果需要,您可以在jar中编辑清单并再次签名。

    请确认我的理解;如果清单类路径中列出了任何内容,则无法访问
    中的任何内容?所有内容都必须明确指定?在这种情况下,如果我将所有内容都放在/lib中,那么指定一个最简单的类路径有什么好处?有什么价值吗?是的,这很正确。若服务器并没有通过类路径找到jar,它将抛出一个异常。例如,清单中的类路径需要实现瘦战争技术。