无法从绝对路径加载xml文件

时间:2013-07-21 11:37:32

标签: java maven-3

有一个maven项目A.一旦我做了mvn clean install,项目构建并且jar在我的本地存储库中可用,即 C:\库\ COM \计算器\ A \ a.jar文件

A.jar包含这些类使用的几个类和xml文件

在另一个maven项目中,我正在调用使用一个XML文件的类中的一个方法。

代码是:

public File xmlFilder(String xmlAbsolutePath) {
  File f = new File(xmlAbsolutePath);
  return f;
}

第二个项目位于我的D盘中。在获取绝对路径时,我得到的是 \ com \ stackoverflow \ A \ res \ p.xml ,这是正确的绝对路径。

但是如果我在第3行添加以下代码,我将得到如下:

public File xmlFilder(String xmlAbsolutePath) {

  File f = new File(xmlAbsolutePath);

  System.out.println("AbsolutePath----"+f.getAbsolutePath());  ---> D:\com\stackoverflow\A\res\p.xml

  System.out.println("getPath------------"+f.getPath());       ---> \com\stackoverflow\A\res\p.xml 

  System.out.println("exists--------------"+f.exists());       ----> false

return f;

}

任何人都可以让我知道我哪里出错了。为什么不从C驱动器中存在的存储库中选择xml。

2 个答案:

答案 0 :(得分:2)

如果A类(在你的A.jar中捆绑)想要从jar加载xml并且它试图以你的第一个代码示例中显示的方式访问它,那么它不会访问{{罐子里面的1}} 。它访问该位置的文件

如果这是您的情况,很容易测试。创建jar后,暂时从文件系统中删除p.xml并运行A类。它将无法加载它。

当一个类需要加载捆绑在jar中的资源时,它不会使用p.xml而是使用类加载器。

根据您提供的姓名,我认为您的A类在包中:File xml文件位于包com.stackoverflow.A

以下所有方法都会使用您的xml加载流

com.stackoverflow.A.res

答案 1 :(得分:1)

我认为你问的是错误的问题。您可能想知道必须访问p.xml。最好的方法是将A.jar放在类路径上,通过将其指定为"另一个Maven项目"的pom.xml中的依赖项。 在您的代码中,您执行以下操作:

Foo.class.getResource("/thePackagePath/to/p.xml");

通过尝试将xml作为文件访问,您可以将项目非常糟糕地移植到其他系统。