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
~/.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>