当前位置: 首页 > 面试题库 >

如果将同一个类打包在两个jar文件中,则将调用哪个java类文件?

国胤
2023-03-14
问题内容

我正在从事开源项目。截至目前,我在任何课程中都没有任何自定义设置。因此,请使用开源项目提供的所有jar文件。我的问题是,如果我修改一个Java文件,对其进行编译并将其打包为具有相同文件夹结构的新jar文件,那么在服务器启动或运行时是否会出现任何问题?如果不是,将调用哪个类文件(默认文件或我的自定义Java类文件)?


问题答案:

实际上,它取决于许多因素:

  • 如果两个jar文件都位于同一ClassLoader中,例如Java classpath(-cp选项),则通常它应该是jar列表顺序中找到的第一个文件。

  • 如果部署在JavaEE容器中(如EAR文件或WEB-INF/libWAR文件中),则不能保证容器将在两次启动之间加载相同的类。在这种情况下,唯一肯定的是,WEB-INF/classes之前搜索WEB-INF/lib

  • 在复杂的ClassLoader层次结构中,默认行为是“父先搜索”,但是JavaEE实现引入了诸如父后策略(WebSphere)或由于部署描述符(WebLogic,JBoss / WildFly)进行过滤的机制

一个选项可能是由于该属性而在META- INF/MANIFEST.MF文件中声明jar文件的依赖关系Class- Path。它应该在ClassLoader级别强制执行加载顺序,尤其是在开始时,java -jar myapp.jar但它可能取决于JavaEE上下文中的实现。

备注:
在使用开源项目时,提交变更请求并发布您的变更或改进以使社区从中受益可能是公平的。这样,您的项目就可以更新到主流,而在ClassPath中就不会遇到这样的难题。



 类似资料:
  • 问题内容: 我写了一个Java程序,它实际上是现有命令行程序的gui。所以基本上我的程序就是。因此,我已经使用Eclipse IDE将java源文件导出为可执行jar文件,并且效果很好,但是我确实需要将此myprogram.exe包含在生成的jar文件的目录中才能正常工作。 现在,我正在寻找一种在jar文件中包含myprogram.exe的方法,以便可以将其捆绑为一个文件,因此首选使用Eclips

  • 问题内容: 好的,这可能是java中的小问题。我们不能在一个文件中定义两个公共类。但是,在《 SCJP学习指南》一书的示例中,提到了以下示例: 当我将其复制粘贴到netbeans中时,立即引发了编译错误,该公共类A应该在单独的文件中提及。SCJP stdydy指南中的示例真的错误吗?同样在一些模拟测试中,我发现许多问题都具有这种模式,但是在所有选项中都没有提到编译器错误。在这里担心 问题答案: 是

  • 问题内容: 在Java中,你可以在一个文件中定义多个顶级类,条件是其中最多一个是公共的(请参见JLS§7.6)。参见以下示例。 是否有此技术整洁名(类似于)? JLS表示系统可能会强制执行这些二级类不能为的限制,例如,它们不能被视为程序包专用。这真的在Java实现之间有所改变吗? 例如,PublicClass.java: 问题答案: 对于这种技术,我建议的名称(在一个源文件中包括多个顶级类)将是“

  • 问题内容: 我有3个带有常量的String数组。例如: 我想单独转让这些来枚举的,所以我将有3枚举类:,并用方法来实现。但是我不想将它们放在单独的文件中,因为我只有少量数据和相同类型的数据。在同一个有意义的java文件中将所有这些与访问方法一起使用的最佳方法是什么? 问题答案: 它们可以是三个内部类,如下所示: 然后参考他们,等等。 您也可以使用静态导入,如下所示: .. 为了使引用更短:,等等。

  • 基本上我有: 错误:只有在显式请求批注处理时才接受类名“test” 非常感谢所有的回复:)