Saya memiliki proyek Maven multi-modul. Demi contoh ini, pertimbangkan dua modul:
data
consumer
Modul consumer
memiliki modul data
sebagai ketergantungan.
Modul data
mendeklarasikan sekelompok kelas inti. Ada tes di bawah src/test
yang menggunakannya. Tes ini memerlukan beberapa pembuatan objek bertele-tele, jadi saya memiliki kelas dengan beberapa metode utilitas di dalamnya untuk membuat objek ini. Kelas utilitas ini ( SampleDataHelper
) ada dalam src/test
hierarki.
Saya juga memiliki beberapa tes dalam consumer
modul yang perlu membuat beberapa objek bertele-tele ini. Saya ingin menggunakan SampleDataHelper
kelas saya (ditentukan dalam data src/test
) dalam tes yang ada di consumer src/test
pohon saya . Sayangnya, meskipun data
merupakan ketergantungan consumer
, consumer
tidak dapat melihat kelas yang ada di bawah data src/test
.
Untuk mengatasi ini, saya pikir saya mungkin membuat modul lain ( data-test
), dan pindah SampleDataHelper
ke bawah src/main
. Kemudian saya akan memasukkan data-test
sebagai dependensi cakupan pengujiandata
. Sayangnya, ini memperkenalkan ketergantungan melingkar: data
penggunaan data-test
, tetapi data-test
juga membutuhkan data
.
Satu-satunya solusi yang saya temukan adalah menempatkan SampleDataHelper
di data src/main
bawah sebuah test
paket dan berharap tidak ada kode aplikasi nyata yang memanggilnya.
Bagaimana saya bisa berbagi SampleDataHelper
kelas saya antar modul tanpa meletakkannya di bawah src/main
?
data
) bahkan sebelum saya dapat mengompilasi modul kedua saya (consumer
).mvn package
, tetapi seharusnya berfungsi dengan baik dalam satu langkah membangun saat Anda menggunakanmvn install
ataumvn deploy
. Hanya catatan singkat. Dalam salah satu proyek besar kami, kami memiliki pembungkus di atas junitTestBase
dan lokasinya disrc/main
mana saya juga tidak menganggapnya sebagai ide yang baik.Jawaban:
Proyek Konsumen Anda bergantung pada proyek Data Anda, oleh karena itu kami senang bahwa Data harus dibuat sebelum Konsumen. Akibatnya, dengan menggunakan teknik yang disarankan dalam komentar , saya akan memastikan proyek Data Anda berisi semua kode uji yang ingin Anda bagikan dan konfigurasi POM untuk menghasilkan JAR uji:
Proyek Konsumen Anda kemudian akan bergantung pada artefak Data JAR normal, ditambah
test-jar
artefak tambahan , dengan cakupan pengujian tentunya:Saya telah menggunakan pendekatan ini pada banyak kesempatan dan berhasil dengan baik.
sumber
Jadi masalahnya adalah (beberapa) tes dalam
data
modul bergantung padaSampleDataHelper
kelasnya? Anda dapat memindahkanSampleDataHelper
kelas untuksrc/main
satudata-test
modul, jika Anda pada saat yang sama memindahkan tes (yang bergantung pada kelas khusus) untuksrc/test
satudata-test
modul. Akibatnya, tidak akan ada lagi ketergantungan melingkar.sumber
SampleDataHelper
dipindahkan daridata
modul atauconsumer
modul (sebagaimana mestinya) kedata-test
. Sayangnya saya tidak menemukan ini solusi yang sangat "rapi" karena memindahkan tes saya dari modul yang mereka uji, dan ke modul yang berbeda. (Sebenarnya, Anda hanya mengatakan untuk memindahkandata
tes, tetapi saya pikir saya akan menemukan diri saya menggerakkan keduanya untuk konsistensi). Tapi terima kasih atas jawabannya. :-)data-test
modul harus bergantung padadata
modul (dan bukan sebaliknya). Untuk menghindari ketergantungan melingkar, semua pengujian yang saat ini berada didata
modul yang menggunakanSampleDataHelper
harus dipindahkan kedata-test
modul.