web-dev-qa-db-fra.com

Gradule chemin absolu/relatif

J'ai le problème suivant. Quand je veux utiliser un pot local dans mes dépendances Gradle.

Si je viens d'ajouter:

compile files('libs/PushLinkAndroid-5.3.0.jar')

Ça ne marche pas 

C:\Utilisateurs\Kai\AndroidStudioProjects\ProjectA\app\src\main\Java\de\xyz\xxx\projecta\BaseActivity.Java: 21: erreur: package com.pushlink.Android n’existe pas Import com.pushlink.Android.PushLink;

Remarque: Certains fichiers d'entrée utilisent ou remplacent une API obsolète. Remarque: Recompilez avec -Xlint: obsolète pour plus de détails. 4 erreurs

ÉCHOUÉ

ECHEC: La construction a échoué avec une exception.

  • Ce qui s'est mal passé: L'exécution a échoué pour la tâche ': app: compileDebugJava'.

    La compilation a échoué. voir la sortie d'erreur du compilateur pour plus de détails.

  • Essayez: Exécutez l’option --stacktrace pour obtenir le suivi de la pile. Exécutez-la avec l'option --info ou> - debug pour obtenir davantage de sorties de journal.

ÉCHEC DE CONSTRUCTION

Temps total: 6,543 secondes

Si j'ajoute le chemin absolu au pot, le projet est compilé et tout fonctionne:

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

On dirait qu'il y a quelque chose qui ne va pas avec le sentier, mais comment cela pourrait-il se passer lorsque le sentier absolu fonctionne bien?

EDIT: Build.gradle

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "de.xyz.kai.migraenebook"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.Android.support:appcompat-v7:22.2.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile project(':volley')
    debugCompile 'im.dino:dbinspector:3.2.1@aar'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.Android.support:recyclerview-v7:+'
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libs/PushLinkAndroid-5.3.0.jar')
    compile files('libs/PushLinkAndroid-5.3.0.jar')
    //compile files('libraries/PushLinkAndroid-5.3.0.jar')
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libraries/PushLinkAndroid-5.3.0.jar')
}

NOTE: J'ai essayé différents dossiers, le PushLink.jar est dans "libs" et "libraries". La commande que j'utilise ou commente n'a pas d'importance. Le chemin absolu fonctionne, le relatif non.

7
fighter-ii

Essayez ceci, il inclurait tous les JAR du référentiel local, de sorte que vous n’auriez pas à le spécifier à chaque fois:

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

En outre, vous devez savoir que lors du référencement d’un fichier via

files("relative/path/to/a.jar")

path est évalué par rapport au buildscript dans lequel se trouve cet extrait. Ainsi, lorsque votre fichier build.gradle se trouve dans /a/project/build.gradle, le fichier jar doit alors se trouver dans /a/project/relative/path/to/a.jar. Dans une construction en dégradé multiprojets, vous pouvez placer le jar dans un dossier relatif au projet racine et le référencer dans tous les sous-projets via

rootProject.files("relative/to/root/a.jar")

Prenez donc cela en compte et vérifiez à nouveau si vos paramètres de gradle sont corrects.

8
solar

Tout d’abord, à mon avis, l’ajout de bibliothèques manuelles - s’il est possible d’éviter cela - est une mauvaise pratique, car vous devez gérer vous-même la bibliothèque et le chemin.

J'ai jeté un coup d'œil au repo Maven et il semble qu'ils n'aient pas cette lib spécifique ici. C'est ce à quoi je m'attendrais:

compile('com.anypackage.name.PushLinkAndroid-5.3.0.jar')

Comme ce n’est probablement pas votre volonté que celle de l’équipe de développeurs de https://www.pushlink.com/changelog.xhtml , rien ne peut l’aider.

Passons maintenant à votre problème: Avez-vous commencé votre construction avec --stacktrace?

D'après ce que je peux en tirer

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

vous utilisez un système Windows. Ceci est gênant à certains moments parce que Gradle s'attend à ce que les chemins ressemblent à ceci:

C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar

Mon hypothèse est que gradle fait quelque chose comme ceci quand vous ne spécifiez pas le chemin vous-même:

C:\Users\Kai\AndroidStudioProjects\ProjectA\libs/PushLinkAndroid-5.3.0.jar

Vous pouvez vérifier le comportement avec cette tâche Gradle:

task printBuildDir() {
    def buildDir = "${buildDir}"
    println buildDir
    def fixedDir = buildDir.replaceAll('\\\\', '/')
    println fixedDir
}

Si ma supposition est correcte, vous avez plusieurs choix:

  1. Utilisez le chemin complet
  2. Utilisez un chemin interne gradle tel que buildDir et remplacez le\en conséquence (je ne sais pas si cela fonctionne exactement comme mon exemple dans la balise dependencies, vous devrez peut-être définir vous-même une variable globale).
  3. Demander aux développeurs de PushLink de mettre cette bibliothèque à la disposition de Maven Repo 
2
Dr4gon

La spécification de chaque nom de fichier JAR est également une possibilité.

dependencies {
    compile files('lib/dependency_one.jar', 'lib/dependency_two.jar')
}

Ceci indiquera à Gradle d'inclure dependency_one.jar et dependency_two.jar lors de la compilation. Pour confirmer que tous les JAR requis inclus dans la configuration de la compilation, vous pouvez créer cette tâche auxiliaire,

task listJars << {
    configurations.compile.each { File file -> println file.name }
}

Puis lance-le

$ gradle -q listJars
hibernate-core-3.6.7.Final.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jta-1.1.jar
slf4j-api-1.6.1.jar

Lire la suite sur https://docs.gradle.org/current/userguide/declaring_dependencies.html

1
Nishan Chathuranga

Votre dossier libs est égaré. Vous devez le mettre sous MigraeneBook/app, pas directement sous MigraeneBook.

1
libeasy

Si vous appelez le chemin du schéma d'URL, vous pouvez utiliser cet exemple:

def path = "file://${projectDir}/ojdbc6.jar"
0
PRIHLOP

Mon problème était que je l'ai copié à partir d'Android Studio IDE lui-même, de même que commande + c sur les bibliothèques d'un projet et commande + v sur les bibliothèques de l'autre. Pour une raison quelconque, AS produit des fichiers jar de taille zéro ... Mais bon, j'ai appris de nouvelles choses sur Gradle :)

0
tricknology