2015-03-17 23 views
6

Dodatek Android Gradle dodaje obsługę typów kompilacji i wariantów kompilacji, które pozwalają wybrać wersję aplikacji, którą chcesz zbudować na etapie kompilacji (np. Debugowanie lub wydanie).Typy/warianty kompilacji Maven lub Gradle

Jest to bardzo przydatna funkcja dla projektów Gradle, ponieważ możesz mieć 2 wersje aplikacji, które mogą zachowywać się inaczej w niektórych sytuacjach lub mieć różne pliki konfiguracyjne lub właściwości w zależności od typu kompilacji.

Moje pytanie brzmi: czy istnieje podobna funkcja/implementacja dla projektów Java w wersjach innych niż Android od Mavena lub Gradle? Szukam konkretnie aplikacji internetowych Java, ale przypuszczam, że pytanie może mieć również większy cel.

+0

Maven ma profile. Gradle jest programistyczny, więc niestandardowy kod wybiera konfigurację (lub wtyczkę zapewniającą wsparcie). –

+0

O ile widzę, profile Maven pozwalają tylko zarządzać różnymi konfiguracjami pliku pom.xml. Wtyczka Android Gradle zapewnia nie tylko klasę BuildConfig, której można używać wszędzie tam, gdzie znajduje się kod, aby sprawdzić, jaki typ kompilacji jest aktualnie uruchamiany, a także umożliwia określenie pliku typu kompilacji dla * dowolnego * pliku wewnątrz projektu . W porównaniu do tego, profile maven wyglądają jak kompletna dziecięca zabawka. Czy może czegoś brakuje? Jeśli chodzi o Gradle, tak naprawdę nie rozumiem, co masz na myśli. –

+0

Maven jest bardzo kruchy, jeśli kompilacja nie jest zgodna z jego z góry przyjętymi oczekiwaniami. Profile są hackami do wymuszania różnych przepływów. W przypadku Gradle chodziło mi o to, że skoro można pisać kod Groovy, łatwo jest dostosować wykres budowania i zadania na podstawie flag. Wtyczki to właśnie ten sam kod Groovy zapakowany do ponownego użycia. Jeśli istniejąca wtyczka do twojej sprawy nie istnieje, możesz ją łatwo napisać, najpierw wypłukując kod z plików kompilacji, a następnie przechodząc do niestandardowej wtyczki, aby inni mogli się nią cieszyć. –

Odpowiedz

3

przecinając ją do pościgu bez niejasnych odpowiedzi, tutaj jest oficjalną odpowiedź od Luke Daley (Gradleware Engineer) w tej sprawie:

Jest coś aktywnie pracuje. Pracujemy nad ogólnym pojęciem wariantów, aby zapewnić spójne podejście w różnych domenach. Jest to głęboka, głęboka zmiana, więc jest w tym dużo zaangażowania.

Możesz spodziewać się aspektów tego wdrażania w Gradle 2.5 i na.

Później Edit: mam w końcu udało się uzyskać ten pracuje nad projektem webapp JavaEE za pomocą SourceSets zamiast typów Build & wariantów. Biorąc pod uwagę, że SourceSets istniało od bardzo dawna, najwyraźniej mogłeś to zrobić wieki temu ... Ale nawet inżynierowie nie byli w stanie dokładnie wyjaśnić, jak to zrobić ...

W każdym razie, sprawdź kod poniżej build.gradle, gdzie używamy tego samego katalogu wyjściowego dla obu SourceSets, następnie określ lokalizację wtyczki WAR budować od:

apply plugin: 'war' 

sourceSets { 
    main { 
     output.resourcesDir = 'build/resources' 
     output.classesDir = 'build/classes' 
    } 
    debug { 
     java { 
      compileClasspath += main.output 
      runtimeClasspath += main.output 
     } 
     output.resourcesDir = 'build/resources' 
     output.classesDir = 'build/classes' 
    } 
} 

task assembleDebugWar(type: War) { 
    from sourceSets.debug.output 
    archiveName "ROOT.war" 
} 

task assembleReleaseWar(type: War) { 
    from sourceSets.main.output 
    archiveName "ROOT.war" 
} 
+0

Gradle v2.10 jest obecnie niedostępny. Czy ta zaplanowana funkcja miała miejsce? Jeśli tak, to gdzie mogę znaleźć dokumentację? – Thunderforge

+0

Dobre pytanie. Od tego czasu nie szukałem tego. Ale oto, co mogę znaleźć na razie https://docs.gradle.org/current/userguide/native_software.html # buildTypes –

+0

Na górze tej strony znajduje się lista języków, dla których to działa, ale nie Java (ani żadnego języka JVM), czego szukał OP. Trochę też kopie, wygląda na to, że implementacja wariantów kompilacji jest już w okolicy [od Gradle 1.9] (https://docs.gradle.org/1.9/release-notes#build-multiple-variants-of-a-native -binary), a od tego czasu w większości niezmienione. – Thunderforge

Powiązane problemy