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?


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

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


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'
}

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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.