[JAVA] Durchsuchen Sie lokale Maven-Artefakte in Gradle
Durchsuchen Sie lokale Maven-Artefakte in Gradle
Überlegen Sie, wie Sie ein Maven-Artefakt als Abhängigkeit in Gradle festlegen, dessen Quelle öffentlich ist, dessen Artefakte jedoch nicht im öffentlichen Repository registriert sind.
--Wie benutzt man
- Einfaches Glas ohne externe Abhängigkeit-> Methode 1
--Maven jar ohne externe Abhängigkeiten-> Methode 2/3
--Maven jar mit externen Abhängigkeiten-> Methode 3
Methode 1 - Dateien
- gradle-project
- build.gradle
- lib
- NotificationHubs-0.0.4.jar
build.gradle
dependencies {
compile files ('lib/NotificationHubs-0.0.4.jar') //Geben Sie nach Dateipfad an
}
Problem
- Beschränkt auf JAR-Dateien, die nicht auf externe Module verweisen.
--Wenn es sich bei der JAR-Datei um ein Maven-Artefakt handelt, werden die Abhängigkeiten, die von dem in
files
angegebenen Modul verwendet werden, nicht aufgelöst. Zur Laufzeit tritt ein Laufzeitfehler auf.
- Wenn Sie die Quelldatei des Glases sehen können, können Sie das Ziel-Maven-Artefakt mit dem Maven-Plug-In "Assemby" oder "Schatten" zu einem fetten Glas machen.
Methode 2-Repositorys flatDir
- Projektstruktur
- Gleich wie Methode 1
build.gradle
repositories {
flatDir {
dirs "lib" //Sie können auf das in diesem Ordner platzierte Glas in der üblichen Abhängigkeitsnotation verweisen.
}
}
dependencies {
compile('com.windowsazure:NotificationHubs:0.0.4') // groupId/artifactId/version
}
- Die externe Abhängigkeit von "Notification Hubs" wurde nicht behoben. Selbst wenn es kompiliert werden kann, kann die Klasse zur Laufzeit nicht gefunden werden und es tritt ein Fehler auf.
Problem
- Ähnlich wie bei Methode 1 werden die Abhängigkeiten nicht aufgelöst, wenn das referenzierte Modul zusätzliche externe Abhängigkeiten aufweist.
- Vorsicht bei der Verwendung in mehreren Projekten
- Wenn Sie ein "flatDir" definieren, das seine eigene "lib" im referenzierten Teilprojekt angibt, verweist das referenzierte Teilprojekt auf seine eigene "lib" und kann Abhängigkeiten nicht auflösen.
- Platzieren Sie "lib" im Root-Projekt und stellen Sie sicher, dass das Teilprojekt auf "lib" im Root-Projekt verweist.
build.gradle
subprojects {
repositories {
flatDir {
dirs "${rootProject.projectDir}/lib"
}
}
}
Methode 3 Repositorys maven (lokale Ordnerstruktur von Maven)
- Projektstruktur
--Verwenden Sie die Ordnerstruktur des lokalen Repositorys von Maven
- gradle-project
- build.gradle
- lib
- com
- windowsazure
- NotificationHubs
- 0.0.4
- NotificationHubs-0.0.4.jar
- NotificationHubs-0.0.4.pom
build.gradle
repositories {
maven {
url "lib"
}
}
dependencies {
compile('com.windowsazure:NotificationHubs:0.0.4') // groupId/artifactId/version
}
- Die externe Abhängigkeit von "Notification Hubs" wurde behoben.
Problem
- Beachten Sie, dass in der Konfiguration für mehrere Projekte dasselbe Problem wie bei Methode 2 vorliegt.