2

問題について助けが必要です。Java クラスの 1 つで、ファイルにアクセスする必要があります。ファイルは、問題の Java クラスと同じ場所 (ソース コード内) にある必要があります。コードの抜粋を次に示します。

String fileName = "myfile.myext"    
resource = "./" + fileName
String fileContent = IOUtils.toString(clazz.getResourceAsStream(resource));

そして、これは Eclipse の私の開発ボックスで問題なく動作します。ただし、Jenkins (私の CI サーバー) に配置した瞬間、動作しません。以下を確認しました

  1. ファイル「myfile.myext」は、Jenkins にデプロイされた jar に存在します。
  2. Jenkinsコードは、「myfile.myext」を見つけられないだけでなく、クラスの内容をそのように読み取ろうとすると「someOther.class」を見つけられません。ここで「someOther.class」は、コードの一部である実際のクラスです。

関連する可能性のあるいくつかのこと

  1. Jenkins にデプロイされるのは「myProduct.jar」と「myProduct_test.jar」です。私の Junits は「myProduct_test.jar」にのみあり、「myProduct.jar」にはありません。逆に、すべての製品コードは「myProduct.jar」にのみあり、「myProduct_test.jar」は単にクラスパスからその jar を使用します。

ネットネット、ジェンキンスでは、コードベースからファイルを読み取るためのテストケースを取得できません。Eclipseではできます。

誰もこれに直面した/解決したことがありますか?

4

1 に答える 1

1

ここでの問題は、Eclipse でプログラムを実行すると、コードが含まれるディレクトリからコードが実行されるのに対し、Jenkins は別のディレクトリから実行することです。したがって、./コードを含むディレクトリを参照しません。

メソッドを使用してgetResourceAsStream、クラスパス内の場所からリソースをロードでき、明らかに JAR バンドルも処理します。リソースの読み込みに関するこの記事では、ある程度説明する必要があります。

ただし、この方法は、ユーザーが操作する必要のないファイルに対してのみ使用する必要があります。たとえば、ユーザーが編集した構成ファイルを保存する場合は、Application Data directoryなどの別の場所に配置する必要があります。

于 2013-06-07T17:56:20.767 に答える