我正在尝试创建jar,我可以在jar文件外面读取配置文件。优选地从jar文件所在的目录。我的目录结构如下:
/src/main/resources/config
我有一个maven项目,我运行mvn install来创建一个jar文件。
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.expedia.e3.qm.perforce.audit.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>config/config.xml</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>**/config/</exclude>
</excludes>
</configuration>
</plugin>
现在我手动将我的配置文件夹从/ target / classes / config移动到/ target / config我已经研究了maven程序集插件但是我已经尝试了它的所有不同配置而我无法将其输出只有/ target / config它总是会输出/target/audit-1.0/config,其中audit-1.0是我的maven项目名称。
我正在使用Intellij IDEA来调试我的程序并构建/安装maven项目。
在代码中我试图通过
访问该文件InputStream stream = Class.class.getResourceAsStream("/config/config.xml");
当我在IDE中运行它时,当我从命令行运行它时,它会起作用:
java -jar ./audit-1.0.jar
尝试访问“inputStream”后抛出错误:
Exception in thread "main" java.lang.NullPointerException
我理解“/config/config.xml”应该指向“/target/audit-1.0.jar!/config/config.xml”。但是,我希望它指向“/target/config/config.xml”
有什么想法吗?这甚至可能吗?
答案 0 :(得分:3)
File base = new File(<Current class name here>.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();
File configFile= new File(base,"config.xml");