Tambahkan sumber daya, konfigurasi file ke jar Anda menggunakan gradle

91

Bagaimana cara menambahkan file konfigurasi atau sumber daya lainnya ke dalam jar saya menggunakan gradle?

Struktur proyek saya:

src / main / java / com / perseus / .. --- Paket Java (file sumber)

src / main / java / config / *. xml --- File konfigurasi musim semi

Struktur toples yang diharapkan:

com / perseus / .. --- Paket Java (file kelas)

config / *. xml --- File konfigurasi musim semi

Pritesh Mhatre
sumber

Jawaban:

81

Saya menemukan posting ini mencari cara menambahkan direktori tambahan untuk sumber daya. Saya menemukan solusi yang mungkin berguna bagi seseorang. Inilah konfigurasi terakhir saya untuk mendapatkannya:

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}
Wellington Souza
sumber
5
Ini adalah solusi yang jauh lebih sederhana daripada jawaban yang diterima
Stewart
70

Pindahkan file konfigurasi dari src/main/javake src/main/resources.

Peter Niederwieser
sumber
1
Bekerja untuk saya, sepertinya cara termudah dan "paling benar" untuk mencapai hal ini.
EM-Creations
Jawaban ini menyarankan solusi, bukan solusi, dan Gradle memberikan solusi.
Kecebong Mengerikan
@TerribleTadpole ini adalah solusi yang tepat. Semua lainnya adalah solusi.
jannis
64

Terima kasih teman-teman, saya sedang memigrasi proyek yang sudah ada ke Gradle dan tidak terlalu menyukai gagasan untuk mengubah struktur proyek.

Saya telah menemukannya, menurut saya informasi ini dapat berguna untuk pemula.

Berikut adalah contoh tugas dari 'build.gradle' saya:

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}
Pritesh Mhatre
sumber
34
Lebih akurat untuk mengkonfigurasi ulang set sumber. Sesuatu seperti sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }.
Peter Niederwieser
1
Terima kasih @terimakasih Telah mencoba untuk mendapatkan file log4j.xml saya untuk dimasukkan ke dalam jar saya yang dapat dieksekusi yang saya buat menggunakan shadow. Saya juga berurusan dengan proyek lama dan tidak dapat langsung mengubah struktur direktori. Saran Anda tepat seperti yang saya butuhkan !! : D
Piko
@PeterNiederwieser - Saya melihat dalam dokumentasi plugin Java bahwa sumber daya sudah ditentukan untuk mengecualikan * .java. "Hanya berisi sumber daya, dan mengecualikan file .java apa pun yang ditemukan di direktori sumber sumber daya."
Joe Bowbeer
25

Secara default semua file yang Anda tambahkan src/main/resources akan dimasukkan ke dalam toples.

Jika Anda perlu mengubah perilaku itu karena alasan apa pun, Anda dapat melakukannya dengan mengonfigurasi sourceSets.

Ini bagian dari dokumentasi memiliki semua rincian

geoand
sumber
4
Tahukah Anda mengapa hanya konten .../resources/yang disertakan, bukan direktori resource dengan konten tersebut?
sargas
@sargas Anda mungkin harus memulai pertanyaan baru di mana Anda dapat dengan mudah memasukkan semua konteks. Sulit untuk mendapatkan banyak informasi di bagian komentar :(
geo dan
18

Saya mengalami masalah yang sama. Saya memiliki file PNG dalam paket Java dan tidak diekspor dalam JAR terakhir bersama dengan sumbernya, yang menyebabkan aplikasi macet saat dimulai (file tidak ditemukan).

Tidak ada jawaban di atas yang memecahkan masalah saya, tetapi saya menemukan solusinya di forum Gradle. Saya menambahkan yang berikut ini ke build.gradlefile saya :

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

Ini memberi tahu Gradle untuk mencari sumber daya dalam srcfolder, dan memintanya untuk hanya menyertakan file PNG.

EDIT: Berhati-hatilah jika Anda menggunakan Eclipse, ini akan merusak konfigurasi yang Anda jalankan dan Anda akan mendapatkan main class not foundkesalahan saat mencoba menjalankan program Anda. Untuk memperbaikinya, satu-satunya solusi yang saya temukan adalah memindahkan gambar ke direktori lain, res/misalnya, dan menyetelnya sebagai srcDirspengganti src/.

cacat
sumber
2
Saya menggunakan +=operator untuk menambahkan direktori saya ke direktori yang ada: misalnyasourceSets.main.resources.srcDirs += [ "src/main/java" ]
TmTron
3

Ketahuilah bahwa jalur di bawah src / main / resources harus cocok dengan jalur paket dari file .class Anda yang ingin mengakses sumber daya. Lihat jawaban saya di sini .

mike rodent
sumber