2016-02-18 13 views
8

È possibile avere varianti di compilazione basate su set di origini differenti per un'app java tradizionale (NON un progetto Android) in intellij?Costruire varianti (gusti prodotto) nell'applicazione intellij java

Mi piacerebbe utilizzare una funzionalità come productFlavors fornita con il plugin gradle Android, ma per un'applicazione java tradizionale.

esempio:

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 

risposta

0

La risposta è sì, ma si dovrà utilizzare il nuovo modello di software Gradle che è molto in incubazione. Sarà una strada piena di dolore in quanto sarai un blazer di pista come ho imparato ad usarlo per un progetto C/Cpp. Ecco generalmente come sarà la tua build.

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

Riferimento: https://docs.gradle.org/current/userguide/java_software.html

0

Usiamo progetti multi-modulo Gradle per il nostro sistema variante. C'è un progetto di base che contiene il codice comune. Le personalizzazioni vengono semplicemente eseguite in sottoprogetti.

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

I sottoprogetti di variante dipendono dal core e da ciascun file .war di singoli build. Nota che in questo caso non sovrascriviamo le classi dal progetto principale. Per le personalizzazioni del codice utilizziamo Spring e, in alcuni casi, SPI, ma suppongo che qualsiasi framework per le dipendenze possa farlo. Ti costringe solo a fornire punti di estensione espliciti nel nucleo che penso sia una buona cosa.