0

我使用了一个 build.gradle 文件,它需要引用一些在公共存储库和内部存储库中都不可用的 jar 文件。

因此,我将 jar 文件放入我的 Eclipse 项目下方的 lib 目录中:

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

只要我从 Eclipse 中运行或导出我的程序,它就可以正常工作。但是当我尝试gradle buildgradle 失败并出现此错误时:

无法规范文件“C:\Workspaces\MyProject\project\lib\*.jar”的路径。

我将路径更改为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。

4

2 回答 2

1

您需要使用 FileTree 而不是 FileCollection:

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

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

于 2015-07-09T14:28:48.020 回答
0

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

显然,在组合路径和通配符时,存在某种不同的行为使得命令行 gradle hickup。

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

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

我从stackoverflow 上的另一篇文章中获取了这个,这是我在最初的研究中没有找到的。

于 2015-07-09T08:29:56.660 回答