如何从Main jar指定文件路径,而不是依赖JAR

时间:2017-02-20 08:30:01

标签: java maven intellij-idea config jar-with-dependencies

我有一个包含3个模块的java项目。

[ ] Utils
   ----->code
   ----->pom.xml
[ ] Module B
   ----->Resources\config.xml
   ----->code
   ----->pom.xml
[ ] Module C
   ----->Resources\config.xml
   ----->code
   ----->pom.xml

utils模块是模块A和模块B的依赖项。utils具有' ReadConfig' ModuleB和ModuleC使用的功能。模块B和模块C在资源文件夹中具有不同的配置。

模块B和模块C理想情况下应该作为具有依赖关系的独立jar运行,并从目标目录(jar所在的同一目录)中读取config.xml。

目前我通过以下方式获取配置文件位置:

public static final String JAR_PATH = Constants.class.getProtectionDomain().getCodeSource().getLocation().getPath();
public static final String CONFIG_PATH = JAR_PATH.substring(0, JAR_PATH.lastIndexOf('/')) + "/config.xml";

此代码位于Utils模块中。

问题是,在运行项目的IntelliJ(和netbeans)中,JAR_PATH是Utils目标目录。我希望这指向模块A或模块B目标目录。

我的问题是:

  1. 此方案中的最佳做法是什么。两个模块使用不同的配置文件。
  2. 如何使intellij / netbeans在运行模块时将模块A / B作为独立模块运行(带有依赖项的jar)(如果我执行mvn程序集:单个它生成一个具有依赖关系的jar。我想知道如何从的IntelliJ)

1 个答案:

答案 0 :(得分:0)

如果您需要从运行jar app文件的目录中读取某个文件, 然后只使用:(它将被解析为相对于你运行你的应用程序的目录)

File f = new File("someDirInDirWhereMyJarIsRunFrom/myConfig.xml");
FileInputStream fis = new FileInputStream(f);
// read the "fis"

这假设您的app文件夹的结构如下:

  + YourAppFolder
  |---> yourApp.jar
  |---+ someDirInDirWhereMyJarIsRunFrom
      |--->myConfig.xml