我将Maven与M2_HOME定义为:
我有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
直到这里,一切正常。代码编译,执行良好。
我的困惑如下。
根据我的理解,Gradle的mavenLocal()
应该使用与Maven的<localRepository>
文件中定义的settings.xml
相同的路径。
现在确认在Maven本地存储库中存在已经下载的一些依赖项。
当我执行示例gradle构建时,我确实意识到了
/Users/manuelj/.gradle/caches/modules-2/files-2.1
我希望新的依赖项直接转到同一个Maven Local Repository。
因此,需要什么额外配置呢?
答案 0 :(得分:24)
mavenLocal()
解决方式如下:
Gradle会查看
~/.m2/settings.xml
以获取本地Maven存储库所在的信息。如果未找到任何信息,则会采用~/.m2/repository
。
这是对Gradle论坛上提出的问题“mavenLocal() - how does Gradle resolve the directory of the local maven repository?”的回答。
引用的讨论还包含针对您的特定问题的解决方案。为了使用非标准的本地maven存储库,您可以在build.gradle
中使用以下配置:
repositories {
maven {
url '/Users/manuelj/apache/maven/repository'
}
}
答案 1 :(得分:8)
使用
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
答案 2 :(得分:4)
这驱使我喝酒。
如果我对一个版本为mvn install
的项目执行1.1.1.SNAPSHOT
,则它将毫无错误地进入我的本地Maven存储库(〜/ m2 / repository / ...)。但是,使用mavenLocal()
的Gradle不会尝试在本地maven存储库中找到它(已经使用./gradlew bootRun --debug
并检查了日志)。
如果我将版本更改为1.1.1-SNAPSHOT
(请注意破折号),则Gradle将尝试并找到存储库。
Maven认为这是供本地使用的有效版本号对我来说没有意义,但Gradle完全忽略了它。
答案 3 :(得分:0)
我遇到过这个问题,因为我正在处理遗留项目,我需要使用sudo gradle build
命令运行我的构建。构建涉及复制XSD文件,这需要root权限。我选择不使用之前答案的解决方案,因为我不想更改构建文件;我不想意外地检查我的build.gradle
更改。我发现Gradle正在检查mavenLocal
文件夹中的/var/root/.m2
。我的解决方案是将/Users/me/.m2/settings.xml
复制到/var/root/.m2
并为localRepository
添加一行以指向我的/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>