从jar覆盖属性文件

时间:2018-10-19 12:40:53

标签: java classpath

我的maven依赖项的.jar之一中有一个属性文件。我想覆盖应用程序中的值,所以我创建了一个具有相同名称和相同程序包的文件,但jar文件中的值仍在使用中。如果我从jar中删除属性文件,则会使用应用程序中文件的值。如何始终使用应用程序中的属性而不是.jar?

4 个答案:

答案 0 :(得分:1)

只要代码从类路径中获取属性文件,它就取决于类路径的配置方式。

如果您将文件从任何jar文件中外部化-请尝试在Java命令-cp参数中将路径放置到实际文件位于其他jar文件之前的目录。

如果将文件保留在自己的jar文件中,则位于classpath中-您的jar文件必须位于具有默认属性文件的依赖项jar文件之前。

仍然这些不是很好的解决方案(有时很难控制JVM首先使用哪个路径)。

因此,请尝试查找有关依赖项jar的文档-它可能具有一个属性,可以从何处指向要使用的属性文件。

答案 1 :(得分:0)

您可以使用Maven Resource Plugin并参数化配置文件,以便可以pass the parameters as arguments through command line

答案 2 :(得分:0)

使用jar中的属性资源作为模板,这是将要使用的属性文件的初始文件:

Path propertiesFile = Paths.get(System.getProperty("user.home"),
        ".myapp/config.properties");
Files.createDirectories(propertiesFile.getParent());

if (!Files.exists(propertiesFile)) {
    Files.copy(getResourceAsStrem("/config.properties"), propertiesFile);
}

Properties props = new Properties();
props.load(new FileInputStream(propertiesFile.toString());

答案 3 :(得分:0)

这个怎么样?

  • 使用覆盖的值重命名属性文件, 像这样_override.properties(如果实际文件是 称为original.properties。
  • 现在,在您的代码中,读取一个名为“ toOverrideProps”的系统属性(如果为true),以加载覆盖的属性文件
  • 运行程序时,可以使用-Dprop = value方法设置此属性。 这样,您可以选择在启动时使用实际属性文件或被覆盖的属性文件,而不会发生冲突。