Gradle альтернатива mvn установить

163

У меня есть 2 разных проекта на Mvn. Я пытаюсь заменить Gradle.

Проект 1 является SDK, а проект 2 использует SDK (пример)

Во времена Maven он создает артефакт с помощью mvn install, который добавляет весь проект в локальный репозиторий.

Мне нравится работать в Gradle, как это. Мне нравится проект 1 build.gradle нужно опубликовать его как локальный репозиторий gradle, а затем пример проекта должен использовать его.

В maven мы делаем mvn install, который добавляет артефакт проекта в папку .m2, но как это сделать в gradle, чтобы я мог добавить артефакт проекта в локальный репозиторий.

Любой способ, которым я могу сделать это?

Rajmahendra
источник

Ответы:

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 install это установит SDK в .m2 правильно? И mavenLocal () также получает информацию от .m2 и .gradle?
Раджмахендра
14
gradle installпубликуется в локальном репозитории Maven и mavenLocal()проверяет наличие зависимостей.
Питер Нидервизер
1
Gradle не "фазово-ориентированный", как Maven? IOW, если я сделаю это gradle publish, это также не пройдет installфазу?
Крис Ф
74

Вы можете искать:

gradle publishToMavenLocal

Доступен с:

apply plugin: 'maven-publish'

См .: https://docs.gradle.org/current/userguide/publishing_maven.html.

Мигель Рейес
источник
3
Работает нормально даже с опциями maven:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
редкий
3
как это отличается от gradle installс mavenплагином?
Мэтт
8

Ознакомьтесь с документацией Gradle по многопроектным сборкам .

Вот пример с некоторыми дополнительными зависимостями. Просто позвониgradle install в корневую папку, и все будет собрано и помещено в локальный репозиторий.

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

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

корень / build.gradle:

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

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

корень / settings.gradle:

include 'sdk'
include 'example'

корень / SDK / build.gradle:

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

корень / пример / build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}
csaba.sulyok
источник
4
Это идеальная практика? Что если он захочет создать новый проект example2, который также использует sdk? Теперь он должен поместить 2 несвязанных проекта в корневой проект только потому, что они имеют общую зависимость? Вы могли бы подумать, что вся эта «мультипроектная» установка также будет проектом 1 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

    Найти более подробную информацию в документации .

Саша Шпота
источник