1

Maven プロジェクト A があります。mvn クリーン インストールを実行すると、プロジェクトがビルドされ、jar がローカル リポジトリ、つまり c:\repository\com\stackoverflow\A\A.jar で使用可能になります。

A.jarには、これらのクラスで使用されるいくつかのクラスとxmlファイルが含まれています

別の Maven プロジェクトから、1 つの XML ファイルを使用するクラスのメソッドの 1 つを呼び出しています。

コードは次のとおりです。

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

2 番目のプロジェクトは、私の 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を選択しないのはなぜですか。

4

2 に答える 2

2

A クラス ( A.jar にバンドルされている) が jar から xml をロードする必要があり、最初のコード例に示す方法でアクセスしようとすると、jar 内にはアクセスしませんp.xmlその場所にあるファイルにアクセスします。

これがあなたのケースであるかどうかをテストするのは簡単です。jar が作成されたらp.xml、ファイル システムから一時的に削除し、A クラスを実行します。ロードに失敗します。

クラスが jar にバンドルされているリソースをロードする必要がある場合、使用するのはクラスローダーではありませんFile

あなたが提供した名前から、あなたのクラス A はパッケージにあると思います: com.stackoverflow.A xml ファイルはパッケージにあるcom.stackoverflow.A.res

以下のすべてのアプローチは、xml でストリームをロードします

InputStream is = null;

// Using class - relative to the class location because path does not start with "/"
is = SimpleWriter.class.getResourceAsStream("res/p.xml");

// Using class - absolute path because path starts with "/"
is = SimpleWriter.class.getResourceAsStream("/com/stackoverflow/A/res/p.xml");

// Using classloader - path is *always* absolute. Note that leading "/" is missing
is = SimpleWriter.class.getClassLoader().getResourceAsStream("com/stackoverflow/A/res/p.xml");
于 2013-07-22T12:11:47.747 に答える
1

あなたは間違った質問をしていると思います。にアクセスする必要があることを知りたいでしょうp.xml。最良の方法は、クラスパスに A.jar を配置することです。これは、「他の Maven プロジェクト」の pom.xml で依存関係として指定することによって行います。コードでは、次のことを行います。

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

xml にファイルとしてアクセスしようとすると、プロジェクトの他のシステムへの移植性が非常に悪くなります。

于 2013-07-21T17:38:42.497 に答える