web-dev-qa-db-fra.com

Comment ajouter une dépendance de fichier .jar locale au fichier build.gradle?

J'ai donc essayé d'ajouter ma dépendance de fichier .jar locale à mon fichier build.gradle:

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')
} 

Et vous pouvez voir que j'ai ajouté les fichiers .jar dans le dossier référencé Libraries ici: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries

Mais le problème est que lorsque j'exécute la commande: gradle build sur la ligne de commande, l'erreur suivante apparaît:

error: package com.google.gson does not exist
import com.google.gson.Gson;

Voici mon rapport complet: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

524
Q Liu

Si vous avez vraiment besoin de prendre ce fichier .jar depuis un répertoire local,

Ajoutez à côté de votre diplôme (pas le fichier de l'application):

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   implementation name: 'gson-2.2.4'
}

Cependant, étant un fichier .jar standard dans un référentiel Maven, pourquoi ne pas essayer ceci?

repositories {
   mavenCentral()
}
dependencies {
   implementation 'com.google.code.gson:gson:2.2.4'
}
415
Jorge_B

Selon la documentation , utilisez un chemin relatif pour une dépendance de jar locale comme suit:

dependencies {
    implementation files('libs/something_local.jar')
}
589
leeor

Vous pouvez également faire cela en incluant tous les JAR dans le référentiel local. De cette façon, vous n'auriez pas à le spécifier à chaque fois.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
291
Nightwolf

Ce qui suit fonctionne pour moi:

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

Reportez-vous à la Documentation Gradle .

45
Misha

Vous pouvez essayer de réutiliser votre référentiel Maven local pour Gradle:

  • Installez le fichier jar dans votre référentiel Maven local:

    mvn install:install-file -Dfile=utility.jar -DgroupId=com.company -DartifactId=utility -Dversion=0.0.1 -Dpackaging=jar

  • Vérifiez que le fichier jar est installé dans votre référentiel Maven local ~/.m2/

  • Activez votre référentiel Maven local dans votre fichier build.gradle:

    repositories {
      mavenCentral()  
      mavenLocal()  
    }
    
    dependencies {  
      implementation ("com.company:utility:0.0.1")  
    }
    
    • Vous devez maintenant activer le fichier jar pour la mise en œuvre dans votre projet.
29
Daniel Mora

La réponse acceptée est bonne, cependant, j'aurais eu besoin de diverses configurations de bibliothèque au sein de ma construction Gradle multi-projets pour utiliser la même bibliothèque Java tierce.

L'ajout de '$ rootProject.projectDir' à l'élément de chemin 'dir' dans ma 'tousprojects' signifiait que chaque sous-projet était référencé de la même manière ' libs 'répertoire, et pas a version locale de ce sous-projet:

//gradle.build snippet
allprojects {
    ...

    repositories {
        //All sub-projects will now refer to the same 'libs' directory
        flatDir {
            dirs "$rootProject.projectDir/libs"
        }
        mavenCentral()
    }

    ...
}

EDIT by Quizzie: remplacé "$ {rootProject.projectDir}" par "$ rootProject.projectDir" (fonctionne dans la dernière version de Gradle).

27
Big Rich

Un moyen simple de le faire est

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

il compilera tous les fichiers .jar de votre répertoire libs dans App.

12
ZygoteInit

Je n'ai pas pu obtenir la suggestion ci-dessus à https://stackoverflow.com/a/20956456/1019307 au travail. Cela a fonctionné pour moi cependant. Pour un fichier secondstring-20030401.jar que j'ai stocké dans un répertoire libs/ à la racine du projet:

repositories {
    mavenCentral()
    // Not everything is available in a Maven/Gradle repository.  Use a local 'libs/' directory for these.
    flatDir {
       dirs 'libs'
   }
}

...

compile name: 'secondstring-20030401'
8
HankCa

La question a déjà reçu une réponse détaillée. Je veux toujours ajouter quelque chose qui semble très surprenant pour moi:

La tâche "dépendances de niveaux" ne répertorie aucune dépendance de fichiers. Même si vous pensez bien, comme ils ont été spécifiés dans le bloc "dépendances" après tout ..

Donc, ne vous fiez pas à la sortie de ceci pour vérifier si vos fichiers lib locaux référencés fonctionnent correctement.

6
icyerasor

La solution qui a fonctionné pour moi est l'utilisation de fileTree dans un fichier build.gradle. Conservez le fichier .jar à ajouter comme dépendance dans le dossier libs. Le code ci-dessous dans le bloc dependenices dans build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
6
Jince Martin

ne solution pour ceux qui utilisent Kotlin DSL

Les solutions ajoutées jusqu’à présent sont excellentes pour l’OP, mais ne peuvent pas être utilisées avec Kotlin DSL sans les avoir au préalable traduites. Voici un exemple montrant comment j'ai ajouté un fichier .JAR local à ma construction à l'aide de Kotlin DSL:

dependencies {
    compile(files("/path/to/file.jar"))
    testCompile(files("/path/to/file.jar"))
    testCompile("junit", "junit", "4.12")
}

Rappelez-vous que si vous utilisez Windows, vous devez échapper vos barres obliques inverses:

...
compile(files("C:\\path\\to\\file.jar"))
...

Et rappelez-vous également que les guillemets doivent être des guillemets doubles et non des guillemets simples.

6
Jonathan Landrum

La meilleure façon de le faire est d’ajouter ceci dans votre fichier build.gradle et de cliquer sur l’option sync

dependency{
    compile files('path.jar')
}
5
saunlogan

Vous pouvez ajouter jar faire:

Pour gradle, il suffit de mettre le code suivant dans build.gradle:

dependencies {
...
compile fileTree(dir: 'lib', includes: ['suitetalk-*0.jar'])
...
}

et pour maven il suffit de suivre les étapes suivantes:

Pour Intellij: Fichier-> structure du projet-> modules-> onglet dépendance-> cliquez sur + signe-> jar et dépendance-> sélectionnez les jar que vous souhaitez importer-> ok-> appliquer (si visible) -> ok

N'oubliez pas que si vous rencontrez une exception Java.lang.NoClassDefFoundError: Could not initialize class au moment de l'exécution, cela signifie que les dépendances dans le fichier jar non installées pour cette raison doivent être ajoutées à toutes les dépendances du projet parent.

1
ankit

Goto File -> Structure du projet -> Modules -> app -> Onglet Dépendances -> Cliquez sur + (bouton) -> Sélectionnez une dépendance de fichier -> Sélectionnez le fichier jar dans le dossier lib

Cette procédure ajoutera automatiquement votre dépendance à gralde

Très simple

1
Jaya