如何将本地.jar文件依赖项添加到build.gradle文件?

时间:2013-12-20 09:14:44

标签: java gradle dependency-management build.gradle gradle-eclipse

所以我试图将我的本地.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

16 个答案:

答案 0 :(得分:570)

根据the documentation,使用本地jar依赖关系的相对路径,如下所示:

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

答案 1 :(得分:401)

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

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

repositories {
   flatDir {
       dirs 'libs'
   }
}


dependencies {
   compile name: 'gson-2.2.4'
}

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

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

答案 2 :(得分:283)

您也可以执行此操作,其中包括本地存储库中的所有JAR。这样您就不必每次都指定它。

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

答案 3 :(得分:42)

以下适用于我:

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

请参阅Gradle Documentation

答案 4 :(得分:27)

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

添加' $ rootProject.projectDir '到' 目录'我的' 所有项目'中的路径元素封闭意味着每个子项目引用相同的' 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}" to" $ rootProject.projectDir" (适用于最新的Gradle版本。)

答案 5 :(得分:26)

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

  • 将jar安装到您当地的Maven存储库中:

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

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

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

    repositories {
      mavenCentral()  
      mavenLocal()  
    }
    
    dependencies {  
      compile ("com.company:utility:0.0.1")  
    }
    
    • 现在您应该在项目中启用jar进行编译

答案 6 :(得分:12)

一种简单的方法是

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

它将编译App。

中libs目录中的所有.jar文件

答案 7 :(得分:8)

我无法在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'

答案 8 :(得分:8)

更短版本:

dependencies {
    implementation fileTree('lib')
}

答案 9 :(得分:6)

该问题已经得到详细解答。我仍然希望添加一些对我来说非常令人惊讶的东西:

“gradle dependencies”任务不会列出任何文件依赖项。即使你可能这么认为,因为它们已经在“依赖”块中被指定了......

所以不要依赖于它的输出来检查你引用的本地lib文件是否正常工作。

答案 10 :(得分:5)

最好的方法是在build.gradle文件中添加它并点击同步选项

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

答案 11 :(得分:3)

针对使用Kotlin DSL的用户的解决方案

到目前为止添加的解决方案对于OP来说非常有用,但是如果不先翻译它们,就不能与Kotlin DSL一起使用。这是我如何使用Kotlin 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"))
...

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

答案 12 :(得分:1)

转到文件 - >项目结构 - >模块 - > app - >依赖关系选项卡 - >点击+(按钮) - >选择文件依赖关系 - >在lib文件夹中选择jar文件

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

非常简单

答案 13 :(得分:0)

您可以添加jar来做:

对于gradle,只需将以下代码放在build.gradle中:

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

对于Maven,只需执行以下步骤:

对于Intellij: 文件->项目结构->模块->依赖项选项卡->单击+标记-> jar和依赖项->选择要导入的jars->确定->应用(如果可见)->确定

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

答案 14 :(得分:-1)

另一种方式:

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

答案 15 :(得分:-1)

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

出于这个原因,我宁愿将jar添加到本地存储库,当然,也可以在构建服务器上执行相同操作。