Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置maven,使maven exec插件能够访问';之外目录中的配置文件;src/';_Java_Maven_Classpath_Executable Jar_Exec Maven Plugin - Fatal编程技术网

Java 如何配置maven,使maven exec插件能够访问';之外目录中的配置文件;src/';

Java 如何配置maven,使maven exec插件能够访问';之外目录中的配置文件;src/';,java,maven,classpath,executable-jar,exec-maven-plugin,Java,Maven,Classpath,Executable Jar,Exec Maven Plugin,我正在使用访问代码中的属性文件 ClassName.class.getClassloader().getResourceAsStream("config/config.properties")); 及 如果属性文件在resources目录中,那么一切正常,我使用maven exec插件运行程序,没有任何问题。我得打个电话 mvn exec:java -Dexec.mainClass="MyMainClass" 但这种方法有一个很大的缺点。它包括属性文件 如何更改maven配置

我正在使用访问代码中的属性文件

    ClassName.class.getClassloader().getResourceAsStream("config/config.properties"));

如果属性文件在resources目录中,那么一切正常,我使用maven exec插件运行程序,没有任何问题。我得打个电话

    mvn exec:java -Dexec.mainClass="MyMainClass"
但这种方法有一个很大的缺点。它包括属性文件

如何更改maven配置,使“config/config.properties”文件对maven exec插件可用,而不在“src”内部,也不包含在jar中


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

如果使用
getClassloader().getResourceAsStream()
则表示您正试图访问类路径上可用的文件。但是,您引用的文件不在类路径上。因此,您必须选择:

  • 将配置文件夹添加到类路径。您可以通过向
    pom.xml
    添加
    来实现这一点,但效果与使用
    src/main/resources/config/config.properties
    完全相同
  • 不要从类路径文件中读取属性,而是从已知位置的文件中读取属性。这将是我首选的解决方案。对于这个解决方案,我想参考另一个链接。在您的例子中,您可以将其作为参数添加,从
    公共静态void main(String[])
    中选取它。或者从
    新文件(“config/config.properties”)
    中读取它,因为它是相对于执行根计算的

这是@robertschlote的变体,请解释一下你想说什么。我看了这个问题,没有看到任何对这个问题有用的信息。“我如何使‘config/config.properties’文件对maven exec插件可用,而不在resources目录中,也不包含在jar中。”它在哪里?一定在某个地方。@tieTYT这更清楚了吗?喂。不幸的是,使用
resources
标记并不能阻止配置文件包含在jar中。并且使用
file()
无法访问类路径,这就是我首先使用
getResourceAStream()
的原因。确切地说,您必须在这两者之间进行选择:类路径资源或文件。但是,如果您有一个
pom.xml
,那么还有第三个选项:这正是我的问题->“如何配置maven,以便maven exec插件可以访问'src/'之外目录中的配置文件?”您不配置maven,只配置插件:我认为允许它引用文件夹,因此,请尝试:config,现在只从类路径中读取'config.properties'。最后,执行java可执行文件(通过向命令行添加-X可见)。请阅读类路径规范。也许你可以在没有Maven的情况下先尝试一下,以确保这是可能的。
    mvn exec:java -Dexec.mainClass="MyMainClass"