如何添加本地. 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文件添加到此处的引用库文件夹中: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

810376 次浏览

如果你真的需要从本地目录中获取那个. jar,

在你的模块gradle旁边添加(不是app gradle文件):

repositories {
flatDir {
dirs 'libs'
}
}




dependencies {
implementation name: 'gson-2.2.4'
}

但是,作为实际maven存储库中的标准. jar,您为什么不尝试一下呢?

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

根据留档,为本地jar依赖项使用相对路径,如下所示。

Groovy语法:

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

静态编程语言语法:

dependencies {
implementation(files("libs/something_local.jar"))
}

您也可以这样做,这将包括本地存储库中的所有JAR。这样您就不必每次都指定它。

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

接受的答案是好的,但是,我需要在我的多项目Gradle构建中使用各种库配置来使用相同的第三方Java库。

在我的“allproject”闭包中的“dir”路径元素中添加“$rootProject.project迪尔”意味着每个子项目都引用了相同的“libs”目录,而不是是该子项目的本地版本:

//gradle.build snippet
allprojects {
...


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


...
}

编辑:将“${rootProject.projectDir}”更改为“$rootProject.projectDir”(适用于最新的Gradle版本)。

另一种方式:

在树视图中添加库。右键单击此。选择菜单“添加为库”。 出现一个对话框,让您选择模块。好的,完成了。

我无法在https://stackoverflow.com/a/20956456/1019307上获得上面的建议。不过,这对我很有效。对于我存储在项目根目录libs/目录中的文件secondstring-20030401.jar

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'

一个简单的方法是

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

它将编译App中libs目录中的所有. jar文件。

这个问题已经得到了详细的回答。我仍然想补充一些让我感到非常惊讶的事情:

“gradle依赖项”任务没有列出任何文件依赖项。即使你可能这样认为,因为它们毕竟已经在“依赖项”块中指定了。

因此,不要依赖它的输出来检查引用的本地lib文件是否正常工作。

转到文件->项目结构->模块->应用程序->依赖项选项卡->点击+(按钮)->选择文件依赖项->选择lib文件夹中的jar文件

此步骤将自动将您的依赖项添加到gralde

很简单

最好的方法是将其添加到您的build.gradle文件中并点击同步选项

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

对我有效的解决方案是在build.gradle文件中使用fileTree。 将需要添加的. jar作为依赖项保留在libs文件夹中。在build.gradle的依赖块中给出以下代码:

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

您可以尝试为Gradle重用本地Maven存储库:

  • 将jar安装到本地Maven存储库中:

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

  • 检查您是否已将jar安装到~/.m2/本地Maven存储库中

  • build.gradle文件中启用本地Maven存储库:

    repositories {
    mavenCentral()
    mavenLocal()
    }
    
    
    dependencies {
    implementation ("com.company:utility:0.0.1")
    }
    
    • 现在您应该启用jar以在您的项目中实现

以下对我有用:

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

请参阅Gradle文档

如果您使用的是持续集成,请小心,您必须在构建服务器上的相同路径中添加您的库。

出于这个原因,我宁愿将jar添加到本地存储库,当然,在构建服务器上也这样做。

适用于使用静态编程语言DSL的解决方案

到目前为止添加的解决方案非常适合OP,但如果不首先翻译它们,就无法与静态编程语言DSL一起使用。以下是我如何使用静态编程语言DSL将本地. JAR添加到构建中的示例:

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"))
...

还要记住,引号必须是双引号,而不是单引号。


2020年编辑:

Gradle更新已弃用compiletestCompile,转而使用implementationtestImplementation。因此,对于当前Gradle版本,上述依赖块如下所示:

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

你可以添加jar做:

对于gradle,只需在build.gradle中添加以下代码:

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

对于maven,只需按照步骤操作:

对于Intellij: 文件->项目结构->模块->依赖选项卡->点击+签名->jar并依赖->选择你要导入的jar->ok->应用(如果可见)->ok

请记住,如果您在运行时遇到任何java.lang.NoClassDefFoundError: Could not initialize class异常,这意味着尚未安装jar中的依赖项,您必须在父项目中添加所有依赖项。

更短的版本:

dependencies {
implementation fileTree('lib')
}

使用静态编程语言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所在的目录)。

您可以在#EYZ和excludes中使用蚂蚁模式,如上所示。

有关文件依赖项的更多信息,请参阅Gradle文档

感谢这篇文章提供了有用的答案。

对于带有Groovy构建文件的Gradle版本7.4

repositories {
flatDir {
dirs 'libs'
}
}


dependencies {
implementation ':gson-2.2.4'
}

如果您使用的是gradle 4.10或更高版本:

implementation fileTree(dir: 'libs', includes: ['*.jar'])