Как добавить local.зависимость файла jar для сборки.файл gradle?

поэтому я попытался добавить свой локальный .зависимость файла jar от моей сборки.файл 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')
} 

и вы можете видеть, что я добавил .файлы jar в папку referencedLibraries здесь:https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries

но проблема в том, что когда я запускаю команду: gradle build в командной строке, я получаю следующую ошибку:

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

вот все мое РЕПО: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

14 ответов


Если вам действительно это нужно .jar из локального каталога,

добавить рядом с модулем gradle (не файл приложения gradle):

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   compile name: 'gson-2.2.4'
}

однако, будучи стандартом .jar в реальном хранилище maven, почему бы вам не попробовать это?

repositories {
   mavenCentral()
}
dependencies {
   compile 'com.google.code.gson:gson:2.2.4'
}

по данным документация, используйте относительный путь для локальной зависимости jar следующим образом:

dependencies {
    compile files('libs/something_local.jar')
}

вы также можете сделать это, которое будет включать все банки в локальном репозитории. Таким образом, вам не придется указывать его каждый раз.

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

для меня работает следующее:

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

относятся к Gradle Документация.


принятый ответ хорош, однако мне понадобились бы различные конфигурации библиотеки в моей сборке Gradle с несколькими проектами, чтобы использовать ту же стороннюю библиотеку Java.

добавить ' $rootProject.projectDir' в 'dir 'элемент пути внутри моего'allprojects' закрытие означало, что каждый подпроект ссылается на то же самое 'libs и не версия для суб-проекта:

//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: изменено " ${rootProject.projectDir} " to " $rootProject.projectDir " (работает в новейшей версии Gradle).


вы можете попробовать повторно использовать локальный репозиторий Maven для Gradle:

  • установите банку в локальный репозиторий Maven:

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

  • проверьте, что у вас установлена банка в ваш ~/.m2/ локальный репозиторий Maven

  • включите локальный репозиторий Maven в своем :

    repositories {
      mavenCentral()  
      mavenLocal()  
    }
    
    dependencies {  
      compile ("com.company:utility:0.0.1")  
    }
    
    • теперь у вас должен быть включен jar для компиляции в вашем проект

простой способ сделать это -

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

он будет составлять все .файлы jar в каталоге libs в приложении.


Я не мог получить предложение выше в https://stackoverflow.com/a/20956456/1019307 работать. Это сработало для меня. Для файла secondstring-20030401.jar что я сохранил в libs/ каталог в корне проекта:

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'

лучший способ сделать это-добавить это в свою сборку.gradle файл и нажмите опцию синхронизации

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

на вопрос уже был дан подробный ответ. Я все еще хочу добавить кое-что, что кажется мне очень удивительным:

задача "зависимости gradle" не содержит списка зависимостей файлов. Даже если вы так думаете, поскольку они были указаны в блоке "зависимости" в конце концов..

поэтому не полагайтесь на вывод этого, чтобы проверить, правильно ли работают ваши ссылочные локальные файлы lib.


решение, которое сработало для меня, - это использование fileTree в build.файл gradle. Оставь себе .jar, который нужно добавить как зависимость в папку libs. Приведите ниже код в блоке dependenices в build.Gradle в:

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

Goto файл - > структура проекта - > модули - > приложение - > вкладка зависимости - > нажмите на +(кнопка) - > Выберите файл зависимости - > Выберите файл jar в папке lib

эти шаги автоматически добавят вашу зависимость к gralde

Очень Просто


иначе:

добавить библиотеку в виде дерева. Щелкните правой кнопкой мыши на этом. Выберите меню "Добавить как библиотеку". Появится диалоговое окно, позволяющее выбрать модуль. Хорошо, и дело сделано.


будьте осторожны, если вы используете непрерывную интеграцию, вы должны добавить свои библиотеки в том же пути на сервере сборки.

по этой причине я бы предпочел добавить jar в локальный репозиторий и, конечно же, сделать то же самое на сервере сборки.