Как добавить локальную зависимость.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 build в командной строке, я получаю следующую ошибку:
error: package com.google.gson does not exist
import com.google.gson.Gson;
Вот мое репо: https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1
22 ответа
Если вам действительно нужно взять этот.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')
}
Вы также можете сделать это, что будет включать все файлы JAR в локальном хранилище. Таким образом, вам не нужно будет указывать это каждый раз.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Следующие работы для меня:
compile fileTree(dir: 'libs', include: '*.jar')
Обратитесь к документации 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 в вашем
build.gradle
файл:repositories { mavenCentral() mavenLocal() } dependencies { compile ("com.company:utility:0.0.1") }
- Теперь у вас должен быть включен jar для компиляции в вашем проекте
Решение для тех, кто использует 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"))
...
Также помните, что кавычки должны быть двойными, а не одинарными.
Принятый ответ хороший, однако мне понадобились бы различные конфигурации библиотеки в моей многопроектной сборке 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()
}
...
}
РЕДАКТИРОВАТЬ от Quizzie: изменил "${rootProject.projectDir}" на "$rootProject.projectDir" (работает в последней версии Gradle).
Укороченная версия:
dependencies {
implementation fileTree('lib')
}
На вопрос уже был дан подробный ответ. Я все еще хочу добавить кое-что, что кажется мне очень удивительным:
Задача "gradle зависимости" не перечисляет никаких файловых зависимостей. Даже если вы так думаете, ведь они были указаны в блоке "зависимости".
Поэтому не полагайтесь на вывод этой команды, чтобы проверить, правильно ли работают ваши локальные файлы lib, на которые вы ссылаетесь.
Простой способ сделать это
compile fileTree(include: ['*.jar'], dir: 'libs')
он скомпилирует все файлы.jar в вашем каталоге libs в App.
Еще несколько способов добавить файлы локальной библиотеки с помощью Kotlin DSL (build.gradle.kts):
implementation(
files(
"libs/library-1.jar",
"libs/library-2.jar",
"$rootDir/foo/my-other-library.jar"
)
)
implementation(
fileTree("libs/") {
// You can add as many include or exclude calls as you want
include("*.jar")
include("another-library.aar") // Some Android libraries are in AAR format
exclude("bad-library.jar")
}
)
implementation(
fileTree(
"dir" to "libs/",
// Here, instead of repeating include or exclude, assign a list of paths
"include" to "*.jar",
"exclude" to listOf("bad-library-1.jar", "bad-library-2.jar")
)
)
Приведенный выше код предполагает, что файлы библиотеки находятся в каталоге libs/ модуля (под модулем я имею в виду каталог, в котором находится этот build.gradle.kts).
Вы можете использовать шаблоны Ant в
include
песок
exclude
с, как показано выше.
См. документацию Gradle для получения дополнительной информации о зависимостях файлов.
Спасибо этому сообщению за полезный ответ.
Я не смог получить предложение выше на /questions/29616718/kak-dobavit-lokalnuyu-zavisimostjar-fajla-v-fajl-buildgradle/29616742#29616742 для работы. Это сработало для меня, хотя. Для файла 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'
Решение, которое сработало для меня, это использование fileTree в файле build.gradle. Сохраните.jar, который нужно добавить в качестве зависимости, в папке libs. Ниже приведен код в блоке зависимостей в build.gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Лучший способ сделать это - добавить это в файл build.gradle и нажать опцию синхронизации.
dependency{
compile files('path.jar')
}
Вы можете добавить jar, выполнив:
Для gradle просто поместите следующий код в build.gradle
:
dependencies {
...
compile fileTree(dir: 'lib', includes: ['suitetalk-*0.jar'])
...
}
а для мавена просто следуйте шагам:
Для Intellij: Файл-> Структура проекта-> Модули-> вкладка Зависимости-> нажмите + знак-> jar и зависимость-> выберите банки, которые вы хотите импортировать-> ok-> применить (если они видны)->ok
Помните, что если у вас есть java.lang.NoClassDefFoundError: Could not initialize class
исключение во время выполнения, это означает, что зависимости в jar не установлены, для этого необходимо добавить все зависимости в родительский проект.
Если вы используете Gradle 4.10 или новее:
implementation fileTree(dir: 'libs', includes: ['*.jar'])
Для Gradle версии 7.4 с файлом сборки Groovy
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation ':gson-2.2.4'
}
Перейдите в Файл -> Структура проекта -> Модули -> Приложение -> Вкладка Зависимости -> Нажмите +(кнопка) -> Выберите Зависимость файла -> Выберите файл JAR в папке lib
Эти шаги автоматически добавят вашу зависимость к gralde
Очень просто
Это работает в Gradle 8.3. Если вы делаете это в Windows, см. ниже.
репозитории {
FlatDir {dirs 'D:/path/of/jar/lib'}} зависимости { реализация ':json-resource2.4.0'}
Добавьте строку ниже в «определение зависимостей» вашего файла build.gradle:
файлы реализации("/Users/<user_name>/<folder_structure>/<jar_name>.jar")
Это помогло мне взять файл .jar из моей локальной системы для конкретного проекта.
Будьте осторожны, если вы используете непрерывную интеграцию, вы должны добавить свои библиотеки по тому же пути на вашем сервере сборки.
По этой причине я бы предпочел добавить jar в локальный репозиторий и, конечно же, сделать то же самое на сервере сборки.
По-другому:
Добавить библиотеку в виде дерева. Щелкните правой кнопкой мыши на этом. Выберите меню "Добавить в библиотеку". Появится диалоговое окно, позволяющее выбрать модуль. ОК и готово.