Wie stelle ich den Projektnamen / die Gruppe / die Version sowie die Kompatibilität mit {Quelle, Ziel} in derselben Datei ein?

81

Ich beabsichtige, die Verwendung von gradle für meine Projekte zu verallgemeinern und möchte überall dieselbe Build-Datei wiederverwenden. Leider habe ich Probleme, die in $ subject genannten Eigenschaften in einer einzigen Datei zu definieren, um die Migration zu vereinfachen.

Dies ist Gradle 1.6.

Was ich versucht habe, scheiterte bei allen Versuchen:

  • gradle.properties: Name kann nicht geändert werden (schreibgeschützt, muss a verwenden settings.gradleund den Namen des Stammprojekts überschreiben !); {source,target}Compatibilitynicht berücksichtigt;
  • settings.gradle: auch {source,target}Compatibilitynicht berücksichtigt!

Was ist die richtige Methode, um dies zu erreichen? Was ich bisher versucht habe in gradle.properties:

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

Und in settings.gradle:

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

EDIT Nun, das "Name" -Problem kann einfach nicht gelöst werden. Im Übrigen habe ich eine andere Datei verwendet, die ich in der Build-Datei anwende. Die "Namens" -Handhabung ist wirklich nicht richtig: /

EDIT 2 Dies ist jetzt 2014 und Gradle 1.12, und das Problem ist immer noch nicht gelöst ...

fge
quelle
1
Zu Ihrer Information, die Unfähigkeit, den Projektnamen in der Datei build.gradle anzupassen, ist derzeit eine Verbesserungsanforderung: issue.gradle.org//browse/GRADLE-2412 .
Ryan Nelson

Antworten:

125

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
quelle
Sie möchten also über Builds hinweg wiederverwenden? Sie können tun apply from: "other.gradle"oder apply from: "http://my.server.com/other.gradle". Beachten Sie, dass Letzteres derzeit nicht zwischengespeichert ist. Um das Caching zu erhalten, müssten Sie ein Binär- Plugin schreiben .
Peter Niederwieser
Ja, ich benutze die apply from:Lösung. Dies löst jedoch nicht das
Namensproblem
1
Ich denke, im neuesten Gradle können Sie auch ein Plugin anwenden settings.gradle. Es scheint jedoch etwas seltsam, ein Plugin zu verwenden, um den gleichen Projektnamen für alle Builds festzulegen.
Peter Niederwieser
Beachten Sie, dass es auch möglich ist, alle diese Eigenschaften von einem init.gradlein Ihrem Benutzerhaus aus festzulegen (siehe Benutzerhandbuch).
Peter Niederwieser
1
Sie müssen keine Variablen in gradle.properties definieren und in settings.gradle verwenden. Sie können nur in settings.gradle rootProject.name = "someName" erwähnen. Stellen Sie sicher, dass Sie es in settings.gradle in doppelten Anführungszeichen angeben.
Gopinath MR
22

Ich habe die Lösung für ein ähnliches Problem gefunden. Ich verwende Gradle 1.11 (Stand April 2014). Der Projektname kann direkt in der settings.gradleDatei wie folgt geändert werden :

  rootProject.name='YourNewName'

Dies sorgt für das Hochladen in das Repository (Artifactory mit seinem Plugin für mich) mit der richtigen Artefakt-ID.

zggame
quelle
2
Diese Lösung ist für Builds mit mehreren Projekten nicht ideal.
Asandroq
@asandroq, da Sie nur eine einzige Einstellungsdatei haben können, müssen Sie das Submodul von dort aus umbenennen. Es ist zentral, aber es funktioniert.
Snicolas
19

Ich habe das Artefakt baseName so festgelegt, dass es unabhängig vom Namen des Build-Projekts ist, wodurch ich das erreichen kann, was Sie wollen:

jar {
    baseName "core"
}

Mit dieser Eigenschaft gradle installwird das Artefakt beim Ausführen mit dem Namen coreanstelle von "foo" veröffentlicht, auch wenn mein Projektname "foo" ist foo.

Jeff
quelle
1
Hilft nicht allen anderen Aufgaben, die den Projektnamen verwenden würden, und kann zusätzliche Verwirrung über die zusammenstoßenden Namen verursachen ...
Quarz
3

Anscheinend wäre dies settings.gradlemit so etwas möglich .

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

Ich habe kürzlich den Rat erhalten, dass eine Projekteigenschaft mithilfe eines Abschlusses festgelegt werden kann, der später aufgerufen wird, wenn das Projekt verfügbar ist.

Eero Aaltonen
quelle