Gradle alternate to mvn install

163

Eu tenho 2 projeto diferente construir em MVN. Estou tentando substituir o Gradle.

o projeto 1 é SDK e o projeto 2 usa o sdk (exemplo)

Na época do maven, ele cria artefato usando o mvn install, que adiciona todo o projeto ao repositório local.

Eu gosto de trabalhar em gradle assim. Eu gosto do projeto 1 build.gradle precisa publicá-lo como um repositório local gradle e, em seguida, um projeto de exemplo precisa usá-lo.

No maven, instalamos o mvn install, que adiciona um artefato do projeto à pasta .m2, mas como fazer em gradle, para que eu possa adicionar os artefatos do projeto ao repositório local.

Qualquer maneira que eu possa fazer isso?

Rajmahendra
fonte

Respostas:

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
fonte
1
aplique o plugin: "maven" e $ sdk> gradle install isto instalará o sdk em .m2, certo? E o mavenLocal () também obtém informações de .m2 e .gradle?
Rajmahendra
14
gradle installpublica no repositório Maven local e mavenLocal()procura dependências.
Peter Niederwieser
1
Gradle não é "orientado à fase" como o Maven? IOW, se eu fizer gradle publishisso, ele também não passará por uma installfase?
Chris F
74

Você pode estar procurando:

gradle publishToMavenLocal

Disponível com:

apply plugin: 'maven-publish'

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

Miguel Reyes
fonte
3
É bom trabalhar mesmo com opções Maven:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
esparsa
3
como isso é diferente gradle installcom o mavenplugin?
18719 Matt
8

Confira a documentação de Gradle sobre compilações de vários projetos .

Aqui está um exemplo, com algumas dependências extras. Basta ligar gradle installna pasta raiz e tudo será criado e colocado no seu repositório local.

Estrutura de pastas:

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 / exemplo / build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}
csaba.sulyok
fonte
4
Essa é a prática ideal? E se ele quiser criar um novo projeto, exemplo2, que também depende do sdk? Agora ele tem que colocar 2 projetos não relacionados em um projeto raiz apenas porque eles compartilham uma dependência? Você pensaria que toda essa configuração de 'multiprojetos' também seria um projeto Git. Novamente, isso é ruim para os fluxos de trabalho da empresa / multi-desenvolvedor?
Anthony Chuinard
2

Você precisa publicar sua própria biblioteca no seu repositório local. Você pode fazer isso da seguinte maneira:

  1. Adicionar maven-publishplugin:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Adicione a seção de publicação ao seu arquivo de construção:

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

    Encontre mais detalhes na documentação .

Sasha Shpota
fonte