Gradle不会将Maven本地存储库用于新的依赖项

Gradle不会将Maven本地存储库用于新的依赖项,gradle,build.gradle,Gradle,Build.gradle,我将带有M2_HOME的Maven定义为/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> 在这里之前,一切都很好。代码编译,执行良好 我的困惑如下

我将带有
M2_HOME
的Maven定义为
/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>
在这里之前,一切都很好。代码编译,执行良好

我的困惑如下

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

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

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

  • 如果Maven本地存储库中已经存在依赖项,则从那里使用它
  • 如果Maven本地存储库中不存在依赖项,请将新依赖项下载到:
    /Users/manuelj/.Gradle/caches/modules-2/files-2.1
我希望新的依赖关系直接转到同一个Maven本地存储库

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

从本地Maven存储库解析依赖项 Gradle能够通过解析存储在本地Maven存储库中的工件(通常
~/.m2/存储库

根据mavenLocal()的解析如下:

Gradle使用与Maven相同的逻辑来标识本地Maven缓存的位置。如果在
settings.xml
中定义了本地存储库位置,则将使用此位置。
USER\u HOME/.m2
中的
settings.xml
优先于
m2\u HOME/conf
中的
settings.xml
。如果没有可用的
settings.xml
,Gradle将使用默认位置
USER\u HOME/.m2/存储库

要解析非标准本地Maven存储库中的工件,可以在
build.gradle
中使用以下配置:

repositories {
    maven {
        url '/Users/manuelj/apache/maven/repository'
    }
}
(发件人:)

自定义Maven存储库是有文档记录的

在本地Maven存储库中存储工件 Gradle将已解决的依赖项存储在自己的数据库中。依赖项缓存不仅仅是一个简单的Maven工件存储库:

  • 存储二进制文件(JAR)、工件元数据(POM、Ivy文件)、依赖项解析结果和模块描述符
  • 针对性能进行了优化,例如更短的文件路径
  • 消除重复工件:相同的二进制文件只存储一次
  • 跟踪依赖项的来源。从
    jcenter()
    解析的依赖项可能与从
    mavenCentral()
    解析的依赖项不同
  • 自动、时间和使用基础、缓存清理
构建所产生的工件可以通过
publishToAvenLocal
任务轻松推送到本地Maven存储库

但解决的依赖关系呢?出于上述原因,Gradle无法将依赖项存储在本地Maven存储库中。目前还没有内置功能,甚至无法从构建脚本将依赖项发布到Maven的本地存储库。那么,你有什么选择:

  • 创建一个shell脚本来完成必要的腿部工作。曾经写过一篇,并在上发表过
  • 使用工件代理,如或。Maven和Gradle可以配置为使用来自同一代理的依赖项。这种设置在专业环境和我个人偏好中非常常见
使用

mavenLocal()
例如:

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

我使用的是Gradle 3.5

我遇到了这个问题,因为我正在处理一个遗留项目,需要使用
sudo-Gradle-build
命令运行我的构建。构建涉及复制XSD文件,这需要根权限。我选择不使用前面答案的解决方案,因为我不想更改构建文件;我不想意外地签入我的
build.gradle
更改。我发现Gradle正在检查
/var/root/.m2
文件夹中的
mavenLocal
。我的解决方案是将
/Users/me/.m2/settings.xml
复制到
/var/root/.m2
并为
本地存储库添加一行,以指向我的
/Users/me/.m2
文件夹。采样线及其添加位置为:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                        http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/Users/me/.m2/repository</localRepository>
  <profiles>

/Users/me/.m2/repository

这让我很想喝酒

如果我为一个版本为
1.1.1.SNAPSHOT
的项目安装了
mvn,它将进入我的本地maven存储库(~/m2/repository/…),并且没有错误。但是,使用
mavenLocal()
的Gradle不会尝试在本地maven存储库中定位它(使用了
/gradlew bootRun--debug
并检查了日志)

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


Maven发现这是本地使用的有效版本号,这对我来说毫无意义,但Gradle完全忽略了它。

谢谢。遗憾的是缺乏对这方面的支持。我也面临着类似的问题,你找到了任何解决方案吗?谢谢你的回复,记住我希望通过Gradle获得的新依赖项能够进入Maven本地存储库。检查我问题中的评论。有一个链接到另一个问题。遗憾的是,目前还没有解决方案。这个答案和下面的答案对我都不适用(gradle版本4.8.1)。我在本地回购协议中有一个工件,但gradle似乎没有看到,而maven本身对此没有问题。添加
apply插件:“maven”
不会help@Jezor看起来你有问题;-)@thokuest我正在等待4.9版在AUR中发布,希望我的版本已经损坏(;@Jezor Gradle 4.9刚刚发布:有趣,我将尝试在其他PCNowadays中检查它您不应该使用mavenLocal()->true,我对此投反对票
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                        http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/Users/me/.m2/repository</localRepository>
  <profiles>