我使用的是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。
答案 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,这是我在初期研究中没有找到的。