Jak ustawić nazwę / grupę / wersję projektu oraz zgodność {źródło, cel} w tym samym pliku?

83

Zamierzam uogólnić użycie gradle w moich projektach i chciałbym wszędzie ponownie używać tego samego pliku kompilacji. Niestety, mam problem ze zdefiniowaniem właściwości wymienionych w $ subject w jednym pliku, aby ułatwić migrację.

To jest klasa 1.6.

Co próbowałem, ale wszystkie próby zakończyły się niepowodzeniem:

  • gradle.properties: nie można modyfikować nazwy (tylko do odczytu, trzeba użyć a settings.gradlei nadpisać nazwę projektu głównego !); {source,target}Compatibilitynie brane pod uwagę;
  • settings.gradle: też {source,target}Compatibilitynie brane pod uwagę!

Jaka jest więc właściwa metoda, aby to osiągnąć? Co próbowałem do tej pory w gradle.properties:

group = something
name = whatever  # cannot do!
version = whatever
sourceCompatibility = whatever # not taken into account!

A w settings.gradle:

sourceCompatibility = "whatever";  # not taken into account!

EDYTUJ No cóż, problemu z nazwą po prostu nie da się rozwiązać; do końca użyłem innego pliku, który stosuję w pliku kompilacji. Obsługa „nazwy” naprawdę nie jest właściwa: /

EDYCJA 2 To jest teraz 2014 i gradle 1.12, a problem nadal nie został rozwiązany ...

fge
źródło
1
Do Twojej wiadomości, brak możliwości dostosowania nazwy projektu w pliku build.gradle jest obecnie żądaniem usprawnienia: Issues.gradle.org//browse/GRADLE-2412 .
Ryan Nelson

Odpowiedzi:

126

gradle.properties:

theGroup=some.group
theName=someName
theVersion=1.0
theSourceCompatibility=1.6

settings.gradle:

rootProject.name = theName

build.gradle:

apply plugin: "java"

group = theGroup
version = theVersion
sourceCompatibility = theSourceCompatibility
Peter Niederwieser
źródło
Chcesz więc używać ich w różnych kompilacjach? Możesz zrobić apply from: "other.gradle"lub apply from: "http://my.server.com/other.gradle". Zauważ, że ta ostatnia nie jest obecnie buforowana. Aby uzyskać buforowanie, musiałbyś napisać wtyczkę binarną .
Peter Niederwieser
Tak, korzystam z apply from:rozwiązania; jednak to nie rozwiązuje problemu z nazwą :(
fge
1
Myślę, że w najnowszym Gradle można również zastosować wtyczkę settings.gradle. Jednak używanie wtyczki do ustawiania tej samej nazwy projektu w różnych kompilacjach wydaje się nieco dziwne.
Peter Niederwieser
Zwróć uwagę, że możliwe jest również ustawienie wszystkich tych właściwości z init.gradledomu użytkownika (patrz instrukcja obsługi).
Peter Niederwieser
1
Nie musisz definiować zmiennych w gradle.properties i używać ich w settings.gradle. Możesz po prostu wspomnieć w settings.gradle rootProject.name = "someName". Upewnij się, że podałeś go w podwójnych cudzysłowach w settings.gradle.
Gopinath MR
22

Znalazłem rozwiązanie podobnego problemu. Używam Gradle 1.11 (od kwietnia 2014). Nazwę projektu można zmienić bezpośrednio w settings.gradlepliku w następujący sposób:

  rootProject.name='YourNewName'

Dba o przesłanie do repozytorium (Artifactory z wtyczką dla mnie) z poprawnym artifactId.

zggame
źródło
2
To rozwiązanie nie jest idealne w przypadku kompilacji obejmujących wiele projektów.
asandroq
@asandroq, ponieważ możesz mieć tylko jeden plik ustawień, będziesz musiał zmienić nazwę modułu podrzędnego z tego miejsca. Jest centralny, ale działa.
Snicolas
19

Ustawiłem nazwę podstawową artefaktu, aby była niezależna od nazwy projektu kompilacji, co pozwala mi osiągnąć to, co chcesz:

jar {
    baseName "core"
}

Gdy ta właściwość jest ustawiona, nawet jeśli nazwa mojego projektu to „foo”, po uruchomieniu gradle installartefakt jest publikowany z nazwą corezamiast foo.

Jeff
źródło
1
Nie pomaga w przypadku wszystkich innych zadań, które używają nazwy projektu, i mogą powodować dodatkowe zamieszanie w związku ze zderzającymi się nazwami ...
Quartz
4

Najwyraźniej byłoby to możliwe w settings.gradleprzypadku czegoś takiego.

rootProject.name = 'someName'
gradle.rootProject {
    it.sourceCompatibility = '1.7'
}

Niedawno otrzymałem poradę, że właściwość projektu można ustawić za pomocą zamknięcia, które zostanie wywołane później, gdy projekt będzie dostępny.

Eero Aaltonen
źródło