Gradle kullanarak kavanozunuza kaynaklar, yapılandırma dosyaları ekleyin


91

Gradle'ı kullanarak kavanozuma yapılandırma dosyalarını veya diğer kaynakları nasıl eklerim?

Proje yapım:

src / main / java / com / perseus / .. --- Java paketleri (kaynak dosyalar)

src / main / java / config / *. xml --- Spring yapılandırma dosyaları

Beklenen kavanoz yapısı:

com / perseus / .. --- Java paketleri (sınıf dosyaları)

config / *. xml --- Spring yapılandırma dosyaları

Yanıtlar:


81

Kaynaklar için fazladan bir dizinin nasıl ekleneceğini araştıran bu gönderiye rastladım. Birisi için faydalı olabilecek bir çözüm buldum. İşte bunu elde etmek için son yapılandırmam:

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
Bu, kabul edilen cevaptan çok daha basit bir çözüm
Stewart

70

Config dosyaları taşıyın src/main/javaiçin src/main/resources.


1
Benim için işe yarıyor, bunu başarmanın en kolay ve "en doğru" yolu gibi görünüyor.
EM-Creations

Bu cevap, bir çözümden ziyade bir çözüm öneriyor ve Gradle bir çözüm sunuyor.
Korkunç Kurbağa Yavrusu

@TerribleTadpole bu doğru çözüm. Diğerleri geçici çözümlerdir.
06'da jannis

64

Teşekkürler çocuklar, mevcut bir projeyi Gradle'a taşıyordum ve proje yapısını değiştirme fikrini o kadar da beğenmedim.

Anladım, bu bilginin yeni başlayanlar için yararlı olabileceğini düşündüm.

İşte 'build.gradle'ımdan örnek bir görev:

version = '1.0.0'

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

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
Kaynak kümesini yeniden yapılandırmak daha doğrudur. Gibi bir şey sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }.
Peter Niederwieser

1
Teşekkürler @PeterNiederwieser !! Gölge kullanarak oluşturduğum çalıştırılabilir jar'ıma log4j.xml dosyamı dahil etmeye çalışıyorum. Ben de eski bir projeyle uğraşıyordum ve dizin yapısını hemen değiştiremiyordum. Öneriniz tam da ihtiyacım olan şeydi !! : D
Piko

@PeterNiederwieser - Java eklenti belgelerinde, kaynakların * .java'yı hariç tutmak için zaten tanımlandığını fark ettim. "Yalnızca kaynakları içerir ve kaynak kaynak dizinlerinde bulunan .java dosyalarını hariç tutar."
Joe Bowbeer

25

Varsayılan olarak src/main/resources, eklediğiniz tüm dosyalar jar'e dahil edilecektir.

Herhangi bir nedenle bu davranışı değiştirmeniz gerekirse, bunu yapılandırarak yapabilirsiniz sourceSets.

Belgelerin bu bölümü tüm ayrıntılara sahiptir


4
Eğer neden sadece içeriğini bilemez .../resources/yerine içerdiği kaynaklar dizininde ile içerik?
sargas

@sargas Muhtemelen tüm içeriği kolayca ekleyebileceğiniz yeni bir soru başlatmalısınız. Yorum bölümünde çok fazla bilgi almak zor :(
geoand

18

Ben de aynı problemle karşılaştım. Java paketinde bir PNG dosyam vardı ve kaynaklarla birlikte son JAR'da dışa aktarılmadı, bu da uygulamanın başlatıldığında çökmesine neden oldu (dosya bulunamadı).

Yukarıdaki cevapların hiçbiri sorunumu çözmedi ancak çözümü Gradle forumlarında buldum. Dosyama şunları ekledim build.gradle:

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

Gradle'a srcklasördeki kaynakları aramasını ve yalnızca PNG dosyalarını eklemesini istemesini söyler .

DÜZENLEME: Eclipse kullanıyorsanız, bunun çalıştırma yapılandırmalarınızı bozacağına ve main class not foundprogramınızı çalıştırmaya çalışırken bir hata alacağınıza dikkat edin. Bunu düzeltmek için bulduğum tek çözüm, res/örneğin görüntüleri başka bir dizine taşımak ve srcDirsbunun yerine olarak ayarlamak src/.


2
+=Mevcut dizinlere dizinlerimi eklemek için operatörü kullandım : örneğinsourceSets.main.resources.srcDirs += [ "src/main/java" ]
TmTron

3

Src / main / resources altındaki yolun, kaynağa erişmek isteyen .class dosyalarınızın paket yolu ile eşleşmesi gerektiğini unutmayın. Cevabımı burada görün .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.