812 Stimmen

Wie füge ich eine lokale .jar-Dateiabhängigkeit zur build.gradle-Datei hinzu?

Ich habe versucht, meine lokale .jar-Datei-Abhängigkeit zu meiner build.gradle-Datei hinzuzufügen:

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    runtime files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
} 

Und Sie können sehen, dass ich die .jar-Dateien hier in den referencedLibraries-Ordner hinzugefügt habe: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries

Aber das Problem ist, dass ich beim Ausführen des Befehls: gradle build in der Kommandozeile den folgenden Fehler erhalte:

Fehler: Paket com.google.gson existiert nicht
import com.google.gson.Gson;

Hier ist mein gesamtes Repo: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

37voto

Eine Lösung für die Verwendung von Kotlin DSL

Die bisher hinzugefügten Lösungen sind großartig für den OP, können jedoch nicht ohne vorherige Übersetzung mit Kotlin DSL verwendet werden. Hier ist ein Beispiel, wie ich eine lokale .JAR-Datei zu meinem Build mit Kotlin DSL hinzugefügt habe:

dependencies {
    compile(files("/Pfad/zur/Datei.jar"))
    testCompile(files("/Pfad/zur/Datei.jar"))
    testCompile("junit", "junit", "4.12")
}

Vergiss nicht, dass du, wenn du Windows benutzt, deine Backslashes maskieren musst:

...
compile(files("C:\\Pfad\\zur\\Datei.jar"))
...

Und denke auch daran, dass Anführungszeichen doppelte Anführungszeichen sein müssen, nicht einfache Anführungszeichen.


Bearbeitung für 2020:

Gradle-Updates haben compile und testCompile zugunsten von implementation und testImplementation veraltet. Daher würde der obige Abhängigkeitsblock für aktuelle Gradle-Versionen wie folgt aussehen:

dependencies {
    implementation(files("/Pfad/zur/Datei.jar"))
    testImplementation(files("/Pfad/zur/Datei.jar"))
    testImplementation("junit", "junit", "4.12")
}

36voto

Big Rich Punkte 5649

Die akzeptierte Antwort ist gut, aber ich hätte verschiedene Bibliothekskonfigurationen innerhalb meines Multi-Projekt-Gradle-Builds benötigt, um dieselbe Java-Bibliothek eines Drittanbieters zu verwenden.

Durch das Hinzufügen von '$rootProject.projectDir' zum 'dir'-Pfadelement innerhalb meines 'allprojects'-Abschlusses bezog sich jedes Teilprojekt auf dasselbe 'libs'-Verzeichnis und nicht auf eine für das Teilprojekt lokale Version:

//gradle.build Ausschnitt
allprojects {
    ...

    repositories {
        //Alle Teilprojekte verweisen jetzt auf dasselbe 'libs'-Verzeichnis
        flatDir {
            dirs "$rootProject.projectDir/libs"
        }
        mavenCentral()
    }

    ...
}

EDIT von Quizzie: Änderte "${rootProject.projectDir}" zu "$rootProject.projectDir" (funktioniert in der neuesten Gradle-Version).

20voto

Topera Punkte 11809

Kürzere Version:

Abhängigkeiten {
    Implementierung fileTree('lib')
}

16voto

icyerasor Punkte 4583

Die Frage wurde bereits ausführlich beantwortet. Ich möchte trotzdem etwas hinzufügen, was mich sehr überrascht:

Die "gradle dependencies" Aufgabe listet keine Dateiabhängigkeiten auf. Obwohl man das vielleicht denkt, da sie schließlich im "Dependencies" Block angegeben wurden.

Verlassen Sie sich also nicht auf die Ausgabe, um zu überprüfen, ob Ihre referenzierten lokalen Bibliotheksdateien korrekt funktionieren.

14voto

ZygoteInit Punkte 465

Ein einfacher Weg, dies zu tun, ist

compile fileTree(include: ['*.jar'], dir: 'libs')

Es wird alle .jar-Dateien in Ihrem libs-Verzeichnis in der App kompilieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X