ChatGPT解决这个技术问题 Extra ChatGPT

Gradle alternate to mvn install

I have 2 different project build on mvn. I am trying to replace to Gradle.

Project 1 is an SDK, and project 2 is using that sdk (example).

In the time of maven it creates artifact using mvn install which adds the whole project into local repository.

I like to work in gradle like that. I like project 1 build.gradle need to post it as a gradle local repository and then example project need to use it.

In maven we do mvn install which adds a project artifact into .m2 folder but how to do in gradle so what i can add a project artefact's into the local repository.

Any way that I can do so?


t
the_storyteller

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

apply plugin: "maven" and $sdk> gradle install this will install the sdk into .m2 right ? And mavenLocal() also gets info from .m2 and .gradle ?
gradle install publishes into the local Maven repo, and mavenLocal() makes sure to look there for dependencies.
Is Gradle not "phase-oriented" like Maven? IOW, if I do a gradle publish will it not also go through an install phase?
@PeterNiederwieser Do I should consider that apply plugin: "maven" makes available the "install" task for Gradle, right? - in some way - it is how a "transitive" (if the term fits well here) task from Maven to Gradle, right?. Consider to update your answer. Thank You
This is no long relevant in Gradle 7+ as the maven plugin has been removed. Instead you need to use the maven-publish plugin and then use gradle publishToMavenLocal.
M
Manuel Jordan

You may be looking for:

gradle publishToMavenLocal

Available with:

apply plugin: 'maven-publish'

See: Maven Publish Plugin


It's working fine even with maven options: gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
how is this different from gradle install with the maven plugin?
@Matthew the maven plugin has been removed in Gradle 7
c
csaba.sulyok

Check out Gradle's documentation on multi-project builds.

Here's an example, with some extra dependencies. Just call gradle install in the root folder, and all will be built and put to your local repo.

Folder structure:

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

Is this ideal practice? What if he wants to create a new project, example2, which also relies on sdk? Now he has to put 2 unrelated projects under a root project just because they share a dependency? You would think this entire 'multi-project' setup would be 1 Git project as well. Again, is this bad for company / multi-developer workflows?
S
Stef

You need to publish your own library to your local repository. You can do that in the following way:

Add maven-publish plugin: plugins { // your other plugins come here... id 'maven-publish' } Add the publishing section to your build file: publishing { publications { myCoolLibrary(MavenPublication) { from components.java } } } Run gradle build publishToMavenLocal Find more details in the documentation.