【问题标题】:get the root directory of a maven application获取 maven 应用程序的根目录
【发布时间】:2023-03-10 22:09:01
【问题描述】:

我需要为我的程序提供一个设置文件,用户应该有权访问该文件来编写我需要的一些设置。
我在应用程序根目录的新目录(称为设置)下创建了一个文件,但在运行时找不到它。
我用
File SettingsFile=new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()+"settings/CreateSettings.txt");
当我在 Eclipse 下执行此操作时,我得到
/application/home/dir/target/classes/settings/ZipCreateSettings.txt 这是错误的。

如果我使用 java -jar 在终端上执行它,我会得到正确的路径,
/application/home/dir/settings/ZipCreateSettings.txt

这会给我带来问题,因为我需要直接从 eclipse 运行应用程序而不使用终端,即使它在启动和运行时将使用 jar 执行。
反正我也不能这样,因为这段代码可能会落到别人手里,他们不知道该怎么处理。

我还使用了其他一些技术,例如 new java.io.File("").getAbsolutePath(); 但这总是给我当前的工作目录,所以如果我从 /home 执行 jar,我会得到 /home。

我认为问题可能是 maven(我一点也不熟悉),因为我的代码前段时间使用纯 java 应用程序。

【问题讨论】:

  • System.getProperty("user.dir"); 这是你要找的吗?
  • @McN 不,这会获取用户的当前目录,例如 /home
  • 你在想user.homeuser.dir 是当前工作目录。所以你应该能够找到文件为System.getProperty("user.dir")+"//settings//CreateSettings.txt";
  • 不,我知道并且我测试了它,user.dir 为我提供了用户执行应用程序的当前目录。至少在Linux下,不能说Windows

标签: java


【解决方案1】:

由于您的文件将位于类路径之外,因此它基本上位于您的应用程序之外。您的应用程序不知道存在于其类路径之外的文件。因此,您将需要某种方式来提供文件的完整/绝对路径。你不能在你的情况下使用类加载器。

我建议您使用系统参数而不是硬编码值。见here

【讨论】:

  • 我不能以某种方式将它添加到类路径中吗?
  • 是的,要么将文件移动到类路径中。通常,main/resources 包含在类路径中。或者您将文件夹添加到您的构建路径。在 Eclipse 中右键单击您的项目 -> 属性 -> Java 构建路径 -> 源 -> 添加文件夹。然后,在您的文件夹中添加一个排除模式 **,以便它知道您的文件夹不会包含 .class 文件。
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 2011-03-28
  • 2011-07-28
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多