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

时间:2017-01-19 20:24:02

标签: java maven jar properties

我想在我的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的问题还是源代码本身的问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

    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)访问任何属性文件,以便访问它。