Memuat file dari toples ketergantungan di dalam maven junit

Saya menggunakan maven 2.1.0 dan memiliki proyek dengan banyak modul. Contoh modul:

  • sumber daya spr
  • spr-umum

spr-common memiliki ketergantungan pada sumber daya spr

spr-resources hanya berisi file, tidak ada kelas.

spr-common memiliki junit yang perlu memuat file dari jar spr-resources.

Saya menggunakan:

String fileName = getClass().getResource("/jaskeyfile.3DES").getFile();
is = getClass().getClassLoader().getResourceAsStream(fileName);
is.read(data);

Dan ini berfungsi ketika saya menjalankan tes di IntelliJ, tetapi ketika saya melakukan tes mvn, gagal dengan NullPointerException ketika saya mencoba melakukan read() di atasnya.

Mengapa ini terjadi? Seharusnya membaca file dari ketergantungan dengan baik.

Selain itu, pom.xml di spr-common memiliki ketergantungan pada sumber daya spr (mencoba keduanya dengan uji cakupan dan tanpa itu)

EDIT: Saya juga mencoba

getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");

tanpa hasil.

EDIT2: File yang diberikan ada di toples yang dihasilkan, jadi menurut saya file tersebut harus dapat diakses.


person Krzysztof Krasoń    schedule 07.12.2010    source sumber
comment
Hmm, itu aneh. Sudahkah Anda mencoba cara yang lebih sederhana: InputStream is = getClass().getResourceAsStream("/java/pkg/with/your/file/filename.txt");? Apakah ketergantungan spr-resources benar-benar ditentukan dalam file pom.xml dan tidak hanya di IDE Anda? Aliran yang dikembalikan adalah null jika sumber daya tidak ditemukan di CLASSPATH. Sunting: Apakah file tersebut benar-benar ada di spr-resources di direktori src/main/resources/java/pkg/with/your/file/filename.txt?   -  person Jiri Patera    schedule 07.12.2010
comment
Jika Anda menjalankan mvn test, pengujian dijalankan secara lokal pada modul khusus ini. Jika Anda memerlukan sumber daya spr modul lain, Anda harus mendefinisikannya sebagai ketergantungan pengujian jika tidak, Anda tidak akan melihatnya dalam kasus pengujian Anda.   -  person khmarbaise    schedule 07.12.2010
comment
Saya rasa Anda melihat semua kompilasi ditambah dependensi pengujian. Jadi tidak perlu mendefinisikannya sebagai ketergantungan pengujian.   -  person Jiri Patera    schedule 07.12.2010
comment
Pertanyaan lama tetapi Anda tidak pernah memberikan tanggapan tentang ini!? :/   -  person bugske    schedule 11.04.2013


Jawaban (2)


Periksa semuanya dengan cermat

Berikut daftar yang harus diselesaikan:

  1. File jaskeyfile.3DES terletak di src/main/resources dalam modul spr-resources
  2. Repositori lokal Anda berisi versi terbaru spr-resources-x.y.z-SNAPSHOT.jar (atau Anda telah merilisnya/membuat versi secara langsung) dan Anda pasti menggunakan mvn clean install di dalamnya
  3. Modul spr-common mereferensikan versi spr-resources-x.y.z.jar yang benar (bernama) (lingkup kompilasi akan terlihat pada classpath pengujian dan kompilasi)

Jika semua hal di atas benar maka pemanggilan getClass().getResourceAsStream("/jaskeyfile.3DES") Anda akan berhasil. Saya menggunakan struktur ini sepanjang waktu dalam proyek saya sehingga Anda tidak meminta bulan atau apa pun di sini.

person Gary Rowe    schedule 08.12.2010

Saya yakin masalahnya mungkin ada pada garis miring di depan. Saya pikir kedua hal ini harusnya berfungsi:

  • getClass().getResourceAsStream("/jaskeyfile.3DES")
  • getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")

Class.getResourceAsStream() mengambil jalur relatif terhadap direktori paket kelas sehingga menerima garis miring di depan.

ClassLoader.getResourceAsStream() sudah mengambil jalur absolut sehingga tidak menerima garis miring di depan.

person trask    schedule 07.12.2010
comment
Saya mencoba kedua classloader, dan mendapatkan kelas getResourceAsStream, baik dengan garis miring maupun tanpa garis miring - person Krzysztof Krasoń; 08.12.2010