Как добавить локальную зависимость .jar файла для файла build.gradle?

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

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

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

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

Вот мое полное репо: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

+533
источник поделиться
16 ответов

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

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

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   implementation name: 'gson-2.2.4'
}

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

repositories {
   mavenCentral()
}
dependencies {
   implementation 'com.google.code.gson:gson:2.2.4'
}
+424
источник

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

dependencies {
    implementation files('libs/something_local.jar')
}
+605
источник

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
+292
источник

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

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

Обратитесь к Gradle Документация.

+45
источник

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

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

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

  • Убедитесь, что у вас установлен jar файл в локальный репозиторий Maven

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

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

Принятый ответ хорош, однако мне понадобилось бы несколько конфигураций библиотек в моей многопроектной компоновке 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" на "$ rootProject.projectDir" (работает в новейшей версии Gradle).

+28
источник

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

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

он скомпилирует все .jar файлы в вашем каталоге libs в приложении.

+12
источник

Я не мог получить предложенное выше предложение fooobar.com/questions/20050/.... Это работало для меня, хотя. Для файла 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'
+8
источник

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

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

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

+6
источник

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
+6
источник

Решение для тех, кто использует Kotlin DSL

Добавленные решения отлично подходят для OP, но их нельзя использовать с Kotlin DSL без их предварительного перевода. Вот пример того, как я добавил локальный .JAR в свою сборку, используя Kotlin DSL:

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

Помните, что если вы используете Windows, ваши обратные слеши должны быть экранированы:

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

Также помните, что кавычки должны быть двойными, а не одинарными.

+6
источник

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

dependency{
    compile files('path.jar')
}
+5
источник

Перейти к файлу → Структура проекта → Модули → Приложение → Вкладка "Зависимости" → Нажмите + (кнопка) → Выберите "Зависимость файла" → Выберите файл jar в папке lib

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

Очень просто

+1
источник

Вы можете добавить jar, выполнив:

Для gradle просто поместите следующий код в build.gradle:

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

а для мавена просто следуйте шагам:

Для Intellij: File-> проект structure-> modules-> зависимость tab-> нажмите + sign-> jar и dependency-> выберите банки, которые вы хотите import-> ok-> применить (если они видны) ) → оК

Помните, что если у вас есть какой-либо java.lang.NoClassDefFoundError: Could not initialize class исключение java.lang.NoClassDefFoundError: Could not initialize class во время выполнения, это означает, что зависимости в jar не установлены, для этого вам нужно добавить все зависимости в родительский проект.

+1
источник

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

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

-1
источник

Другой способ:

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

-2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос