Gradle berganti ke mvn instal

163

Saya punya 2 proyek berbeda yang dibangun di mvn. Saya mencoba mengganti ke Gradle.

proyek 1 adalah SDK dan proyek 2 menggunakan SDK (contoh)

Pada masa pakar itu menciptakan artefak menggunakan mvn install yang menambahkan seluruh proyek ke dalam repositori lokal.

Saya suka bekerja di kelas seperti itu. Saya suka project 1 build.gradle perlu mempostingnya sebagai repositori lokal gradle dan kemudian contoh proyek perlu menggunakannya.

Dalam maven kita melakukan mvn instal yang menambahkan artefak proyek ke dalam folder .m2 tetapi bagaimana melakukannya secara bertahap sehingga apa yang dapat saya tambahkan artefak proyek ke dalam repositori lokal.

Bagaimana saya bisa melakukannya?

Rajmahendra
sumber

Jawaban:

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
sumber
1
terapkan plugin: "maven" dan $ sdk> install gradle ini akan menginstal sdk ke .m2 kan? Dan mavenLocal () juga mendapat info dari .m2 dan .gradle?
Rajmahendra
14
gradle installmenerbitkan ke repo Maven lokal, dan mavenLocal()pastikan untuk mencari dependensi di sana.
Peter Niederwieser
1
Apakah Gradle tidak "berorientasi fase" seperti Maven? TKI, jika saya lakukan gradle publish, bukankah itu juga akan melalui installfase?
Chris F
74

Anda mungkin mencari:

gradle publishToMavenLocal

Tersedia dengan:

apply plugin: 'maven-publish'

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

Miguel Reyes
sumber
3
Ini berfungsi dengan baik bahkan dengan opsi pakar:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
jarang
3
apa bedanya gradle installdengan mavenplugin ini?
Matt
8

Periksa dokumentasi Gradle pada multi-proyek membangun .

Ini sebuah contoh, dengan beberapa dependensi tambahan. Panggil saja gradle installdi folder root, dan semua akan dibangun dan dimasukkan ke repo lokal Anda.

Struktur folder:

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
sumber
4
Apakah praktik yang ideal ini? Bagaimana jika dia ingin membuat proyek baru, example2, yang juga bergantung pada SDK? Sekarang dia harus meletakkan 2 proyek yang tidak terkait di bawah proyek root hanya karena mereka berbagi ketergantungan? Anda akan berpikir bahwa seluruh pengaturan 'multi-proyek' ini akan menjadi proyek 1 Git juga. Sekali lagi, apakah ini buruk untuk alur kerja perusahaan / multi-pengembang?
Anthony Chuinard
2

Anda perlu menerbitkan perpustakaan Anda sendiri ke repositori lokal Anda. Anda dapat melakukannya dengan cara berikut:

  1. Tambahkan maven-publishplugin:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Tambahkan bagian penerbitan ke file build Anda:

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

    Temukan detail lebih lanjut dalam dokumentasi .

Sasha Shpota
sumber