2016-02-18 23 views
8

intellij'de geleneksel bir java uygulaması (bir android proje için değil) için farklı kaynak kümelerine dayalı yapı türevleri var mı?intellij java uygulamasında varyantlar (ürün aromaları)

Android gradle eklentisi ile birlikte gelen, ama geleneksel bir java uygulaması için gelen productFlavors gibi bir özelliği kullanmak istiyorum.

örnek:

library_red -- HelloImpl.java 
library_blue -- HelloImpl.java 
library_common -- Hello.java 

compiled library_blue -- Hello.class, HelloImpl.class 
compiled library_red -- Hello.class, HelloImpl.class 

cevap

0

Cevap evet ama çok kuluçka yeni Gradle yazılım modeli kullanmak zorunda kalacaktır. Bir C/Cpp projesi için kullanmayı öğrendiğim gibi bir iz blazer olacağından, acı dolu bir yol olacak. İşte genel olarak yapınızın nasıl görüneceği.

plugins { 
    id 'jvm-component' 
    id 'java-lang' 
} 

model { 
    buildTypes { 
    debug 
    release 
    } 
    flavors { 
    free 
    paid 
    } 
    components { 
     server(JvmLibrarySpec) { 
      sources { 
       java { 
        if (flavor == flavors.paid) { 
        // do something to your sources 
        } 
        if (builtType == buildTypes.debug) { 
        // do something for debuging 
        } 
        dependencies { 
         library 'core' 
        } 
       } 
      } 
     } 

     core(JvmLibrarySpec) { 
      dependencies { 
       library 'commons' 
      } 
     } 

     commons(JvmLibrarySpec) { 
      api { 
       dependencies { 
        library 'collections' 
       } 
      } 
     } 

     collections(JvmLibrarySpec) 
    } 
} 

Referans: Bizim varyant sistemi için Gradle çok modül projeleri kullanmak https://docs.gradle.org/current/userguide/java_software.html

0

. Ortak kodu içeren bir çekirdek proje var. Özelleştirmeler alt projelerde basitçe yapılır.

subprojects { 
    dependencies { 
    compile project(':core') 
    } 
} 

varyant alt projeleri çekirdek bağlıdır ve her bir .war dosyaları oluşturmak. Bu durumda, çekirdek projeden sınıfları geçersiz kılmayacağımızı unutmayın. Kod özelleştirmeleri için Spring'i kullanıyoruz ve bazı durumlarda SPI kullanıyoruz, ama sanırım herhangi bir bağımlılık enjeksiyon çerçevesi bunu gerçekleştirebilir. Sadece, iyi bir şey olduğunu düşündüğüm özünde net uzatma noktaları sağlamaya zorlar.