J'ai Maven avec M2_HOME défini à:
J'ai le fichier settings.xml, situé sur:
où j'ai déclaré ce qui suit:
<localRepository>/Users/manuelj/Apache/maven/repository</localRepository>
Jusque là avec Maven tout fonctionne bien. Toute nouvelle dépendance y va.
J'ai un projet basé sur Gradle, parmi beaucoup de choses dans mon build.gradle, existent les suivantes:
apply plugin: 'Java'
apply plugin: 'maven'
apply plugin: 'Eclipse'
apply plugin: 'application'
version = '1.0.0'
sourceCompatibility = '1.8'
repositories {
mavenLocal()
mavenCentral()
}
… more
Jusque là, tout fonctionne bien aussi. Code compiler, s'exécute bien.
Ma confusion est la suivante.
D'après ce que j'ai compris, la fonction mavenLocal()
de Gradle doit utiliser le même chemin que <localRepository>
défini dans le fichier settings.xml
de Maven.
Confirmez maintenant qu'il existe dans le référentiel local Maven des dépendances déjà téléchargées.
Lorsque j’exécute par exemple Gradle Build, j’ai réalisé que
/Users/manuelj/.gradle/caches/modules-2/files-2.1
Je souhaite que la nouvelle dépendance aille directement dans le même référentiel local Maven.
Par conséquent, quelle configuration supplémentaire en a besoin?
mavenLocal()
est résolu comme ceci:
Gradle recherche dans
~/.m2/settings.xml
des informations sur l'emplacement du référentiel Maven local. Si aucune information n'est trouvée, cela suppose que~/.m2/repository
.
Voici une réponse à la question " mavenLocal () - Comment Gradle résout-il le répertoire du référentiel maven local? " donné sur les forums Gradle.
La discussion référencée contient également une solution à votre problème spécifique. Pour utiliser un référentiel Maven local non standard, vous pouvez utiliser la configuration suivante dans votre build.gradle
:
repositories {
maven {
url '/Users/manuelj/Apache/maven/repository'
}
}
Utilisation
mavenLocal()
par exemple:
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')
}
J'utilise Gradle 3.5
Cela m'a conduit à boire.
Si je fais mvn install
pour un projet ayant une version de 1.1.1.SNAPSHOT
, il ira dans mon référentiel maven local (~/m2/repository/...) sans erreur. Cependant, Gradle utilisant mavenLocal()
ne tentera pas de le localiser dans le référentiel maven local (après avoir utilisé ./gradlew bootRun --debug
et inspecté les journaux).
Si je change la version en 1.1.1-SNAPSHOT
(notez le tiret), Gradle tentera et trouvera le référentiel.
Cela n'a pas de sens pour moi que Maven trouve qu'il s'agit d'un numéro de version valide pour une utilisation locale, mais Gradle l'ignore complètement.
J'ai rencontré ce problème parce que je travaille sur un projet hérité dans lequel je dois exécuter ma construction avec la commande Sudo gradle build
. La construction implique la copie de fichiers XSD, qui nécessitent des autorisations root. J'ai choisi de ne pas utiliser les solutions des réponses précédentes parce que je ne voulais pas changer le fichier de construction; Je ne voulais pas archiver accidentellement mes modifications build.gradle
. Ce que j’ai trouvé, c’est que Gradle vérifiait mavenLocal
dans le dossier /var/root/.m2
. Ma solution consistait à copier /Users/me/.m2/settings.xml
dans /var/root/.m2
et à ajouter une ligne pour que la variable localRepository
renvoie à mon dossier /Users/me/.m2
. Un exemple de ligne et où l'ajouter est:
<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>