0

私がやろうとしているのは、jarから.classファイル(コンパイルされたクラスファイル)をリソースストリームとしてロードすることです。この試行は、JUnitテストケースの内部から行われます。

  1. テストケースは問題なくコンパイルおよび実行されますSO:AFAIKAssetクラスはクラスパスで利用可能である必要があります
  2. 完全なクラス名は、ファイル構造内の位置と一致している必要がありますSO:パッケージ名のドットをディレクトリ区切り文字に置き換えて、クラスファイルの場所を取得できます
  3. getResourceAsStreamメソッドを使用して、現在のクラスパスにあるすべてのものにアクセスできます。

理解を深めるために、いくつかのコードを紹介します。

package org.jboss.shrinkwrap.impl.nio.file;    
import org.jboss.shrinkwrap.api.asset.Asset;

public class FileStoreTestCase {
// (...)
@Test
public void usedSpace(){    
    final Class<?> classToAdd = Asset.class;
    final String pathToClass = new StringBuilder(classToAdd.getName().replace('.', File.separatorChar)).append(
            ".class").toString();

    final InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(pathToClass);

}

問題は、上記のコードの「in」変数が常にnullであるということです。なぜなのかご存知ですか?そして、どうすればそれを機能させることができますか?

ご入力いただきありがとうございます。

4

1 に答える 1

1

replace('.', '/') を試してください。つまり、File.separatorChar の代わりに '/' を使用してください。

于 2013-02-14T00:59:55.937 に答える