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

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"
        }
    }
}

5
Ini adalah solusi yang jauh lebih sederhana daripada jawaban yang diterima
Stewart

70

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


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
   }
}

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


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/.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.