2016-02-18 21 views
8

Czy w intelli można mieć warianty kompilacji oparte na różnych zestawach źródłowych dla tradycyjnej aplikacji Java (NIE projektu Android)?Warianty konstrukcyjne (smaki produktu) w aplikacji Intellij Javy

Chciałbym użyć funkcji, takiej jak productFlavours, która jest dostarczana z wtyczką gradle android, ale w przypadku tradycyjnej aplikacji java.

przykład:

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 

Odpowiedz

0

Odpowiedź brzmi: tak, ale trzeba będzie użyć nowego modelu oprogramowania Gradle który jest bardzo inkubowanie. Będzie to droga pełna bólu, jako że będziesz blezer, jak nauczyłem się go używać do projektu C/Cpp. Oto ogólnie, jak będzie wyglądać twoja kompilacja.

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

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

0

Używamy Gradle projekty multi-moduł do naszego systemu wariantu. Istnieje projekt podstawowy, który zawiera wspólny kod. Dostosowania są po prostu wykonywane w podprojektach.

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

Warianty podprojektów zależą od rdzenia i każdego kompilacji poszczególnych plików .war. Zwróć uwagę, że w tym przypadku nie zastępujemy klas z projektu podstawowego. Do dostosowywania kodu używamy Springa, a w niektórych przypadkach SPI, ale chyba każdy framework wtrysku zależności może to osiągnąć. To tylko zmusza do zapewnienia wyraźnych punktów rozszerzenia w rdzeniu, co moim zdaniem jest dobre.