【问题标题】:How do I configure maven so that the maven exec plugin can access a config file in a directory outside 'src/'如何配置 maven,以便 maven exec 插件可以访问 'src/' 外部目录中的配置文件
【发布时间】:2014-11-10 14:39:05
【问题描述】:

我正在使用

访问我的代码中的属性文件
    ClassName.class.getClassloader().getResourceAsStream("config/config.properties"));

    this.getClass.getClassloader().getResourceAsStream("config/config.properties");

如果属性文件在资源目录中,一切正常,我使用 maven exec 插件运行程序没有任何问题。我只需要打电话

    mvn exec:java -Dexec.mainClass="MyMainClass"

但这种方法作为一个很大的缺点。它包括属性文件

如何更改 maven 配置,以便 'config/config.properties' 文件可用于 maven exec 插件,而无需位于 'src' 中且不包含在 jar 中?

注意: 澄清一下,当应用程序在生产环境中运行时,我不知道必要的配置文件在哪里。我只知道它在类路径中。这就是为什么我需要使用getResourceAsStream() 并且我需要它不包含在 jar 文件中。

【问题讨论】:

  • @RobertScholte 请解释你想说什么。我查看了这个问题,但没有看到任何对这个问题有用的信息。
  • "我如何使 'config/config.properties' 文件可用于 maven exec 插件,而无需位于资源目​​录中且不包含在 jar 中。"它可以在哪里?它一定在某个地方。
  • @tieTYT 这更清楚了吗?

标签: java maven classpath executable-jar exec-maven-plugin


【解决方案1】:

如果您使用getClassloader().getResourceAsStream(),则意味着您正在尝试访问类路径中可用的文件。但是,您指的是不在类路径上的文件。所以你必须选择:

  • 将配置文件夹添加到类路径中。您可以通过在pom.xml 中添加<resource> 来做到这一点,但效果与src/main/resources/config/config.properties 完全相同。
  • 不要从类路径文件中读取属性,而是从已知位置的文件中读取。这将是我的首选解决方案。对于这个解决方案,我想参考另一个链接。在您的情况下,您可以将其添加为参数,从public static void main(String[]) 中获取。或者从 new File("config/config.properties") 读取它,因为它是相对于执行根计算的。

【讨论】:

  • 你好。不幸的是,使用 resources 标签并不能阻止配置文件被包含在 jar 中。并且使用file() 无法访问类路径,这就是我首先使用getResourceAStream() 的原因。
  • 确切地说,您必须在两者之间进行选择:类路径资源或文件。但是,如果您有pom.xml,那么还有第三种选择:mojo.codehaus.org/exec-maven-plugin/…
  • 这正是我的问题 -> “我如何配置 maven 以便 maven exec 插件 可以访问 'src/' 之外的目录中的配置文件”跨度>
  • 你不配置 Maven,只配置插件:我认为它允许引用文件夹,所以尝试: config 现在只读来自类路径的“config.properties”。
  • 最后,java 可执行文件被执行(通过在命令行中添加 -X 可见)。请阅读docs.oracle.com/javase/7/docs/technotes/tools/windows/… 了解类路径规范。也许你可以先在没有 Maven 的情况下尝试它,以确保它应该是可能的。
猜你喜欢
  • 2010-11-06
  • 2014-10-15
  • 2020-01-02
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多