2013-08-12 11 views
6

Mam konfigurację wielu rzutów z 3 różnymi projektami.Kompilowanie projektu z inną zgodnością źródła java

2 projekty zależą od trzeciego projektu, który nazwałem "rdzeń". W zależności od projektu, "rdzeń" musi się skompilować do słoika, z kompatybilnością źródła dla wersji 1.4 i 1.6, na wyjścia core-1.4.jar i core-1.6.jar.

Czy można to zrobić z pojedynczym build.gradle, lub jaki byłby najlepszy sposób na zrobienie tego? Jak mogę określić, który jar w szczególności w moich zależnościach dla każdego z 2 projektów?

+0

Tak, również zgodne z celem. Próbowałem: sourceCompatibility = 1,4 targetCompatibility = 1,4 w zadaniu, ale to nie działa. Jednym z celów jest Java ME, druga to Android. –

+0

Co dokładnie nie działa? –

Odpowiedz

12

Pytanie dotyczy zasadniczo tego, jak produkować i konsumować dwie odmiany artefaktów opartych na tym samym kodzie Java. Pod warunkiem, że naprawdę potrzebujesz wyprodukować dwa słoiki, które różnią się tylko ich kompatybilnością docelową (co chciałbym najpierw zadać pytanie), jednym ze sposobów osiągnięcia tego jest użycie zestawu źródłowego wtyczki Java main (i zadań, które mu towarzyszą) do wytworzenia pierwsza odmiana i nowy zestaw źródłowy do produkcji drugiej odmiany. Dodatkowo druga wersja musi zostać opublikowana poprzez własną konfigurację, aby projekty zależne mogły się do niej odwoływać. To może wyglądać następująco:

rdzeń/build.gradle:

apply plugin: "java" 

sourceCompatibility = 1.4 

sourceSets { 
    main1_4 { 
     def main = sourceSets.main 
     java.srcDirs = main.java.srcDirs 
     resources.srcDirs = main.resources.srcDirs 
     compileClasspath = main.compileClasspath 
     runtimeClasspath = main.runtimeClasspath 
    } 
} 

compileJava { 
    targetCompatibility = 1.6 
} 

compileMain1_4Java { 
    targetCompatibility = 1.4  
} 

jar { 
    archiveName = "core-1.6.jar" 
} 

main1_4Jar { 
    archiveName = "core-1.4.jar" 
} 

configurations { 
    archives1_4 
} 

artifacts { 
    archives1_4 main1_4Jar 
} 

W projektach zależności:

dependencies { 
    compile project(":core") // depend on 1.6 version 
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version 
} 

Wszystko to może (ale nie musi) być wykonane w ten sam skrypt budujący. Szczegółowe informacje znajdują się w rozdziale "Tworzenie wielu projektów" w Gradle User Guide.

+0

Dziękuję. Mój problem polegał na tym, że ustawiłem compileClasspath = <środowisko Java ME>, które usunęło słoik z głównym projektem ze ścieżki. Zmiana na to + = naprawiono problem. –

+0

Właśnie zdałem sobie sprawę, że muszę całkowicie zmienić moją odpowiedź. Powinno być teraz dużo bliżej prawdy. –

Powiązane problemy