¿Cómo configurar el nombre / grupo / versión del proyecto, además de la compatibilidad de {origen, destino} en el mismo archivo?

82

Tengo la intención de generalizar el uso de gradle para mis proyectos y me gustaría reutilizar el mismo archivo de compilación en todas partes. Desafortunadamente, tengo problemas para tratar de definir las propiedades mencionadas en $ subject en un solo archivo para facilitar la migración.

Esto es gradle 1.6.

Lo que he intentado, fallando en todos los intentos:

  • gradle.properties: no se puede modificar el nombre (solo lectura, debe usar settings.gradleay anular el nombre del proyecto raíz ); {source,target}Compatibilityno tomado en cuenta;
  • settings.gradle: ¡ {source,target}Compatibilitytampoco se tiene en cuenta!

Entonces, ¿cuál es el método correcto para lograr esto? Lo que he probado hasta ahora en gradle.properties:

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

Y en settings.gradle:

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

EDITAR Bueno, el problema del "nombre" simplemente no se puede resolver; por lo demás, he usado otro archivo que aplico en el archivo de compilación. El manejo del "nombre" realmente no es correcto: /

EDITAR 2 Esto es ahora 2014 y gradle 1.12, y el problema aún no está resuelto ...

fge
fuente
1
Para su información, la imposibilidad de personalizar el nombre del proyecto en el archivo build.gradle es actualmente una solicitud de mejora: issues.gradle.org//browse/GRADLE-2412 .
Ryan Nelson

Respuestas:

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
fuente
Entonces, ¿quieres reutilizar entre compilaciones? Puedes hacer apply from: "other.gradle"o apply from: "http://my.server.com/other.gradle". Tenga en cuenta que este último no está almacenado en caché actualmente. Para obtener el almacenamiento en caché, tendría que escribir un complemento binario .
Peter Niederwieser
Sí, uso la apply from:solución; sin embargo, esto no resuelve el problema del nombre :(
fge
1
Creo que en la última versión de Gradle también puedes aplicar un complemento settings.gradle. Sin embargo, parece un poco extraño usar un complemento para establecer el mismo nombre de proyecto en todas las compilaciones.
Peter Niederwieser
Tenga en cuenta que también es posible establecer todas estas propiedades desde una init.gradleen su casa de usuario (consulte la guía del usuario).
Peter Niederwieser
1
No tiene que definir variables en gradle.properties y usarlas en settings.gradle. Solo puede mencionar en settings.gradle rootProject.name = "someName". Asegúrese de especificarlo entre comillas dobles en settings.gradle.
Gopinath MR
22

Encontré la solución a un problema similar. Estoy usando Gradle 1.11 (como abril de 2014). El nombre del proyecto se puede cambiar directamente en el settings.gradlearchivo de la siguiente manera:

  rootProject.name='YourNewName'

Esto se encarga de cargar al repositorio (Artifactory con su complemento para mí) con el artifactId correcto.

zggame
fuente
2
Esta solución no es ideal para compilaciones de varios proyectos.
asandroq
@asandroq, como solo puede tener un único archivo de configuración, tendrá que cambiar el nombre del submódulo desde allí. Es central, pero funciona.
Snicolas
19

Configuré el nombre base del artefacto para que sea independiente del nombre del proyecto de compilación, lo que me permite lograr lo que desea:

jar {
    baseName "core"
}

Con esta propiedad establecida, incluso si el nombre de mi proyecto es "foo", cuando ejecuto gradle install, el artefacto se publica con el nombre en corelugar de foo.

Jeff
fuente
1
No ayuda a todas las demás tareas que usarían el nombre del proyecto y puede crear confusión adicional sobre los nombres en conflicto ...
Quartz
4

Aparentemente, esto sería posible settings.gradlecon algo como esto.

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

Recientemente recibí un aviso de que la propiedad de un proyecto se puede establecer mediante un cierre que se llamará más adelante cuando el Proyecto esté disponible.

Eero Aaltonen
fuente