引用静态库目录 gradle 时构建过程中出现问题

Problems during build when referencing static lib directory gradle

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

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

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

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

Could not normalize path for file 'C:\Workspaces\MyProject\project\lib\*.jar'.

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

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

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

编译器抱怨 error: cannot find symbol,所有这些符号都在从 lib 目录引用的 jars 中。 当我 运行 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 我都试过了。

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

显然,在组合路径和通配符时,命令行 gradle 出现了一些不同的行为。

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

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

我在 Whosebug 上的 another post 那里得到了这个,我在最初的研究中没有找到它。

您需要使用 FileTree 而不是 FileCollection:

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

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

同步