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

我可以使用类路径覆盖正在运行的jar中的文件吗?

司徒阳曜
2023-03-14
问题内容

我有一个JAR文件,其中包含一个应用程序以及该应用程序的配置文件。该应用程序从类路径加载配置文件(使用ClassLoader.getResource()),并使用烘焙到JAR文件中的配置文件完全满足其依赖性。

有时,我希望应用程序以稍微不同的配置运行(特别是我想覆盖JDBC
URL以指向其他数据库),因此我创建了一个新的配置文件,将其存储在正确的目录结构中(这意味着/config类路径条目的目录),我想执行以下操作:

java -cp new-config:. -jar application.jar

但是我无法new-config在应用程序JAR内容之前让classpath拥有路径条目。是否已硬编码JAR的内容始终是类路径上的第一件事?


问题答案:

为什么不不指定-jar就调用应用程序,而是显式命名应用程序主类呢?这将使您可以按要求的顺序将new-
config和application.jar放在类路径上:

例如(假设“ new-config”是一个包含被覆盖的属性文件的目录)

java -cp new-config:application.jar Application.Main.Class

我相信可以在jar内的MANIFEST.MF文件中找到主类的名称。



 类似资料:
  • 问题内容: 是否可以向可运行的jar文件的类路径中添加一些属性文件?我尝试了以下解决方案: 使用以下命令运行可执行文件: java -cp ../prop_dir/prop1.properties;../prop_dir/prop2.properties -jar MyRunnableJar.jar 添加到清单文件中(在“类路径”部分中) ../prop_dir/prop1.properties

  • 问题内容: 我的代码在一个JAR文件(例如)中运行,我需要在代码中知道正在运行的在哪个文件夹中。 因此,如果在中,无论我当前的工作目录是什么,我都希望获取该路径。 问题答案: 用班级名称替换“ MyClass”。 显然,如果从非文件位置加载你的类,这将做奇怪的事情。

  • 问题内容: 我的代码在一个JAR文件(例如foo.jar)中运行,我需要在代码中知道正在运行的foo.jar在哪个文件夹中。 因此,如果foo.jar在中C:\FOO\,无论我当前的工作目录是什么,我都希望获取该路径。 问题答案: 用你的类名称替换“ MyClass”。 显然,如果从非文件位置加载你的类,这将做奇怪的事情。

  • 问题内容: 因此,我可以很好地做到这一点: 如果存在。我也可以高兴地做到这一点: 如果类文件存在于jar的适当部分中。简单的东西。但是我无法为自己的生活做这样的事情: 存在的地方和存在的地方(当然不包含MyClass)。 我会感到愚蠢吗? 问题答案: 可能:) 基本上,这只是在类路径和jar文件中包括(当前目录)。

  • 我正在使用maven构建工具。我的意图是将单独的绝对文件夹[例如:C:\test1.jar,C:\test2.jar]中可用的jar文件添加到类路径中。 我可以看到JAR被添加到war中可用的Manifest.mf文件的类路径中,但当war部署时,它由于“java.lang.ClassNotFoundException”[与test1.jar或test2.jar相关]而失败。 这是否意味着在man

  • 我创建了一个包含我所有编译内容的jar文件。此外,我的ant build脚本将所需的libs复制到子文件夹“libs”中。结构如下所示: 所以当我现在尝试运行我的程序时,我收到以下错误: 为什么会发生这种情况?