Как указать имя / группу / версию проекта, а также совместимость {источник, цель} в одном файле?

84

Я намерен обобщить использование gradle для своих проектов и хотел бы повторно использовать один и тот же файл сборки везде. К сожалению, мне не удается определить свойства, упомянутые в $ subject, в одном файле, чтобы упростить миграцию.

Это Gradle 1.6.

Что я пробовал, безуспешно:

  • gradle.properties: невозможно изменить имя (только чтение, необходимо использовать settings.gradleи переопределить имя корневого проекта!); {source,target}Compatibilityне принимается во внимание;
  • settings.gradle: {source,target}Compatibilityтоже не в счет!

Итак, каков правильный метод для этого? Что я пробовал до сих пор gradle.properties:

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

И в settings.gradle:

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

РЕДАКТИРОВАТЬ Ну, проблема "имени" просто не может быть решена; в остальном я использовал другой файл, который добавляю в файл сборки. Обработка "имени" действительно неправильная: /

РЕДАКТИРОВАТЬ 2 Это сейчас 2014 год и gradle 1.12, и проблема все еще не решена ...

fge
источник
1
К вашему сведению, невозможность настроить имя проекта в файле build.gradle в настоящее время является запросом на улучшение: issues.gradle.org//browse/GRADLE-2412 .
Райан Нельсон

Ответы:

127

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
Питер Нидервизер
источник
Итак, вы хотите повторно использовать в сборках? Вы можете сделать apply from: "other.gradle"или apply from: "http://my.server.com/other.gradle". Обратите внимание, что последний в настоящее время не кешируется. Чтобы получить кеширование, вам нужно написать двоичный плагин.
Peter Niederwieser
Да, я использую apply from:решение; однако это не решает проблему с названием :(
fge
1
Я думаю, что в последней версии Gradle вы также можете применить плагин settings.gradle. Однако использование плагина для установки одного и того же имени проекта во всех сборках кажется немного странным.
Peter Niederwieser
Обратите внимание, что все эти свойства также можно установить из init.gradleдомашней страницы пользователя (см. Руководство пользователя).
Peter Niederwieser
1
Вам не нужно определять переменные в gradle.properties и использовать их в settings.gradle. Вы можете просто указать в settings.gradle rootProject.name = "someName". Обязательно укажите его в двойных кавычках в settings.gradle.
Gopinath MR
22

Нашел решение аналогичной проблемы. Я использую Gradle 1.11 (по состоянию на апрель 2014 г.). Название проекта можно изменить прямо вsettings.gradle файле следующим образом:

  rootProject.name='YourNewName'

Это позаботится о загрузке в репозиторий (для меня Artifactory с его плагином) с правильным artifactId.

zggame
источник
2
Это решение далеко не идеально для многопроектных сборок.
asandroq
@asandroq, поскольку у вас может быть только один файл настроек, вам придется переименовать подмодуль оттуда. Это центральный элемент, но он работает.
Snicolas
19

Я установил artifact baseName таким образом, чтобы он не зависел от имени проекта сборки, что позволяет мне добиться того, что вы хотите:

jar {
    baseName "core"
}

С этим набором свойств, даже если имя моего проекта - "foo", при запуске gradle installартефакт публикуется с именем coreвместо foo.

Джефф
источник
1
Не помогает всем остальным задачам, в которых используется имя проекта, и может создать дополнительную путаницу из-за конфликтующих имен ...
Quartz
4

По-видимому, это было бы возможно settings.gradleс чем-то вроде этого.

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

Недавно я получил совет, что свойство проекта можно установить с помощью закрытия, которое будет вызываться позже, когда проект станет доступен.

Ээро Аалтонен
источник