Gradle чергуються з встановленням mvn


163

У мене є 2 різні проекти, створені на mvn. Я намагаюся замінити Gradle.

проект 1 - SDK, а проект 2 використовує sdk (приклад)

За часів Maven він створює артефакт, використовуючи mvn install, який додає весь проект у локальне сховище.

Мені подобається працювати в градле так. Мені подобається, що проект 1 build.gradle повинен розміщувати його як локальне сховище gradle, і тоді прикладний проект повинен використовувати його.

У Maven ми робимо mvn install, який додає артефакт проекту в папку .m2, але як це зробити в gradle, що я можу додати артефакт проекту до локального сховища.

Будь-який спосіб, що я можу зробити так?


Відповіді:


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
застосувати плагін: "maven" і $ sdk> gradle встановити це встановить sdk в .m2 так? І mavenLocal () також отримує інформацію від .m2 та .gradle?
Rajmahendra

14
gradle installпублікується в місцевому ревізі Maven і mavenLocal()обов'язково шукає там залежності.
Пітер Нідервайзер

1
Хіба Gradle не є «фазово орієнтованим», як Maven? IOW, якщо я буду робити gradle publishзаповіт, він також не пройде installфазу?
Кріс Ф


8

Перегляньте документацію Gradle про багатопроектні версії .

Ось приклад із деякими додатковими залежностями. Просто зателефонуйте gradle installв кореневу папку, і все буде створено та передано до місцевого репо.

Структура папки:

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

4
Це ідеальна практика? Що робити, якщо він хоче створити новий проект, example2, який також покладається на sdk? Тепер він повинен ставити 2 непов'язані проекти під корінний проект лише тому, що вони поділяють залежність? Ви можете подумати, що ціла установка «багатопроекту» також буде проектом Git. Знову ж, це погано для робочих процесів компанії / розробників?
Ентоні Чуйнард

2

Потрібно опублікувати власну бібліотеку у вашому локальному сховищі. Це можна зробити наступним чином:

  1. Додати maven-publishплагін:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Додайте розділ публікації у файл збирання:

    publishing {
        publications {
            myCoolLibrary(MavenPublication) {
                from components.java
            }
        }
    }
  3. Біжи gradle build publishToMavenLocal

    Детальнішу інформацію можна знайти в документації .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.