Gradle不使用Maven Local Repository作为新的依赖项

Man*_*dan 31 gradle build.gradle

我将Maven与M2_HOME定义为:

  • /Users/manuelj/apache/maven/3.2.5

我有settings.xml文件,位于:

  • /Users/manuelj/apache/maven/3.2.5/conf/settings.xml

我声明如下:

<localRepository>/Users/manuelj/apache/maven/repository</localRepository>

直到与Maven一起工作一切正常.任何新的依赖都会在那里.

我有一个基于Gradle的项目,在我的build.gradle中有很多东西,存在以下内容:

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
apply plugin: 'application'

version = '1.0.0'
sourceCompatibility = '1.8'

repositories {
   mavenLocal()
   mavenCentral()
}
… more
Run Code Online (Sandbox Code Playgroud)

直到这里,一切都很好.代码编译,执行良好.

我的困惑如下.

根据我的理解,Gradle mavenLocal()应该使用与<localRepository>Maven settings.xml文件中定义的路径相同的路径.

现在确认在Maven本地存储库中存在已经下载的一些依赖项.

当我执行例如gradle build时,我确实意识到了这一点

  • 如果Maven Local Repository中已存在依赖关系,则从那里使用它.
  • 如果Maven Local Repository Gradle中不存在依赖项,则将新依赖项下载到: /Users/manuelj/.gradle/caches/modules-2/files-2.1

我希望新的依赖项直接转到同一个Maven Local Repository.

因此,需要什么额外配置呢?

tho*_*est 33

~/.m2/repository 解决方法是这样的:

Gradle会查找mavenLocal()本地Maven存储库所在的信息.如果没有找到任何信息,则假定settings.xml.

这是对问题" mavenLocal() - Gradle如何解析本地maven存储库的目录? " 的答案,在Gradle论坛上给出.

引用的讨论还包含针对您的特定问题的解决方案.为了使用非标准的本地maven存储库,您可以在以下配置中使用以下配置settings.xml:

repositories {
    maven {
        url '/Users/manuelj/apache/maven/repository'
    }
}
Run Code Online (Sandbox Code Playgroud)


nhu*_*uvy 11

使用

mavenLocal()
Run Code Online (Sandbox Code Playgroud)

例如:

buildscript {
    ext {
        springBootVersion = '2.0.0.M1'
    }
    repositories {
        mavenCentral()
        mavenLocal()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
    mavenLocal()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('com.oracle:ojdbc6:11.2.0.4')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Gradle 3.5

  • 现在你不应该使用 mavenLocal() !! -&gt; https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:case-for-maven-local (2认同)

Ric*_*tte 5

这驱使我喝酒。

如果我mvn install为一个具有版本的项目进行操作,1.1.1.SNAPSHOT则不会错误地进入我的本地Maven存储库(〜/ m2 / repository / ...)。但是,Gradle使用mavenLocal()将不会尝试在本地Maven存储库中找到它(已使用./gradlew bootRun --debug并检查了日志)。

如果我将版本更改为1.1.1-SNAPSHOT(请注意破折号),则Gradle将尝试并找到存储库。

Maven认为这是供本地使用的有效版本号对我来说没有任何意义,但Gradle完全忽略了它。

  • 我的天啊。感谢分享 - 我正在调试类似的事情相当长一段时间。Gradle 是一个毫无意义的“重新发明轮子”工具。他们不是为让 Maven 变得更好而做出贡献,而是创建了自己的工具,但也有自己的缺陷、花里胡哨…… (3认同)