从JAR依赖项中提取属性文件,并在自己的类路径中使用它



我想在我的Maven项目中使用一个小程序作为依赖项。该程序由一个属性文件配置,该文件可以在执行前进行编辑。到目前为止,我已经在本地存储库中将依赖项添加为JAR。

现在,我想在我自己的上级类路径中访问该依赖项的属性文件,即在myprogram/src/main/resources/config/myprogram.properties中,而不是在myprogram/local-repository/com/example/mydependency/mydependency.jar/mydependency.properties中访问

我试图修改代码中定义属性文件路径的部分:

public example() {
Properties prop = new Properties();
InputStream input = example.class.getResourceAsStream("/config/myprogram.properties");
prop.load(input);
...
}

在将依赖项添加到本地存储库之前,我还删除了它的原始属性文件。

整个程序正在运行,但并不像预期的那样。奇怪的是,既没有使用我在/src/main/resources/config中的新属性文件,也没有使用mydependency.jar中的旧属性文件。似乎在我的最终胖JAR中放入了某种默认属性文件。但我在任何地方都找不到它的来源,即使我试图调试它。那个默认的属性文件似乎是凭空出现的。

现在,如何将依赖项的属性文件正确地移动到自己的类路径中?

这个默认属性文件从哪里出现?

这是Maven的问题还是源代码本身的问题?

提前感谢!

您可以这样做:

public static String getValueFromDependencyProps(ClassLoader cl, String propertiesFile, String key) throws IOException {
Properties prop = new Properties();
prop.load(cl.getResourceAsStream(propertiesFile));
String value = prop.getProperty(key);
if (value == null)
throw new NullPointerException();
else
return value;
}

然后:

String value = getValueFromDependencyProps(YourDependencyClass.class.getClassLoader(), "your.properties", key);

测试和工作。有了它,我就可以从外部Maven依赖项访问任何属性文件(使用它的一个类YourDependencyClass来访问它)。

最新更新