Gradle alternativo para instalar mvn

163

Tengo 2 proyectos diferentes construidos en mvn. Estoy tratando de reemplazar a Gradle.

el proyecto 1 es SDK y el proyecto 2 usa el SDK (ejemplo)

En el momento de maven, crea artefactos usando mvn install que agrega todo el proyecto al repositorio local.

Me gusta trabajar en gradle así. Me gusta el proyecto 1 build.gradle necesita publicarlo como un repositorio local de gradle y luego el proyecto de ejemplo necesita usarlo.

En maven hacemos mvn install, que agrega un artefacto de proyecto en la carpeta .m2 pero cómo hacerlo en gradle, así que puedo agregar un artefacto de proyecto en el repositorio local.

¿De alguna manera puedo hacerlo?

Rajmahendra
fuente

Respuestas:

170

sdk/build.gradle:

apply plugin: "maven"

group = "foo"
version = "1.0"

example/build.gradle:

repositories {
    mavenLocal()
}

dependencies {
    compile "foo:sdk:1.0"
}

$sdk> gradle install

$example> gradle build
Peter Niederwieser
fuente
1
aplique el complemento: "maven" y $ sdk> gradle install esto instalará el sdk en .m2 ¿verdad? ¿Y mavenLocal () también obtiene información de .m2 y .gradle?
Rajmahendra
14
gradle installpublica en el repositorio local de Maven y mavenLocal()se asegura de buscar dependencias allí.
Peter Niederwieser
1
¿Gradle no está "orientado a la fase" como Maven? IOW, si hago un gradle publishtestamento, ¿no pasará también por una installfase?
Chris F
74

Quizás estés buscando:

gradle publishToMavenLocal

Disponible con:

apply plugin: 'maven-publish'

Ver: https://docs.gradle.org/current/userguide/publishing_maven.html

Miguel Reyes
fuente
3
Funciona bien incluso con las opciones de Maven:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
escaso
3
¿Cómo es esto diferente de gradle installcon el mavencomplemento?
Matt
8

Consulte la documentación de Gradle sobre compilaciones multiproyecto .

Aquí hay un ejemplo, con algunas dependencias adicionales. Solo llamagradle install a la carpeta raíz, y todo se compilará y se colocará en su repositorio local.

Estructura de carpetas:

root
+--> build.gradle
+--> settings.gradle
+--> sdk
|    +--> build.gradle
+--> example
     +--> build.gradle

root / build.gradle:

allprojects {
  apply plugin: 'java'
  apply plugin: 'maven'

  group = 'myGroup'
  version = '0.1-SNAPSHOT'
}

root / settings.gradle:

include 'sdk'
include 'example'

root / sdk / build.gradle:

dependencies {
  // just an example external dep.
  compile group:'commons-lang', name:'commons-lang', version:'2.3'
}

root / example / build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}
csaba.sulyok
fuente
44
¿Es esta la práctica ideal? ¿Qué pasa si quiere crear un nuevo proyecto, ejemplo2, que también se basa en SDK? ¿Ahora tiene que poner 2 proyectos no relacionados bajo un proyecto raíz solo porque comparten una dependencia? Se podría pensar que toda esta configuración 'multiproyecto' sería también un proyecto de 1 Git. De nuevo, ¿es esto malo para los flujos de trabajo de la empresa / desarrolladores múltiples?
Anthony Chuinard
2

Necesita publicar su propia biblioteca en su repositorio local. Puede hacerlo de la siguiente manera:

  1. Agregar maven-publishcomplemento:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Agregue la sección de publicación a su archivo de compilación:

    publishing {
        publications {
            myCoolLibrary(MavenPublication) {
                from components.java
            }
        }
    }
  3. correr gradle build publishToMavenLocal

    Encuentra más detalles en la documentación .

Sasha Shpota
fuente