引用静态lib目录gradle时构建期间出现的问题

时间:2015-07-09 07:56:33

标签: gradle build build.gradle gradle-eclipse

我使用的是build.gradle文件,该文件需要引用一些既不在公共存储库也不在内部存储库中的jar文件。

因此我把jar文件放到了Eclipse项目下面的lib目录中:

dependencies {
    ...
    compile files('lib/*.jar')
}

只要我在Eclipse中运行或导出程序,这就可以正常工作。但是当我尝试gradle build gradle因此错误而失败时:

  

无法规范化文件的路径   'C:\工作区\ MyProject的\项目\ lib中\ *罐'

我将路径更改为lib\*.jar,添加了前导./,删除了\*.jar,但无济于事。

当我从依赖项中删除compile files行并将其添加到存储库时

repositories {
    ...
    flatDir { dirs './lib' }
}

编译器抱怨error: cannot find symbol,所有这些符号都在lib目录引用的jar中。 当我运行gradle --debug时,我可以从日志中看到正在搜索flatDir引用的目录:

10:02:20.587 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] using org.gradle.internal.resource.transport.file.FileResourceConnector@48499739 to list all in /C:/...../lib/ 
10:02:20.592 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] found 7 urls

7是lib目录中的文件数。

为什么这在Eclipse(带有gradle工具的STS 3.7)中工作而不是在命令行中?我尝试了gradle 2.2.1和2.5。

2 个答案:

答案 0 :(得分:1)

您需要使用FileTree而不是FileCollection:

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

eclipse的行为与你的gradle不同的原因很可能是因为你没有运行gradle eclipse(eclipse插件添加的任务)。 Eclipse自然不会与你build.gradle交互。 eclipse任务用gradle将你的eclipse更新为snyc。

答案 1 :(得分:0)

我很难找到这个,所以我会保留自己的问题并写下解决问题的方法。

显然,在组合路径和通配符时,会出现某种不同的行为,这会使命令行重叠。

这是正确的语法,适用于命令行上的Eclipse和gradle:

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

我从another post这里得到了stackoverflow,这是我在初期研究中没有找到的。