我使用构建。Gradle文件,它需要引用一些jar文件,这些文件既不在公共存储库中也不在内部存储库中。
因此,我将jar文件放在Eclipse项目下面的lib目录中:
dependencies {
...
compile files('lib/*.jar')
}
只要在Eclipse中运行或导出程序,就可以正常工作。但是当我尝试gradle build
gradle失败时,出现以下错误:
无法规范化文件路径"C: 项目工作区 MyProject 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 (STS 3.7与gradle工具),而不是从命令行?我尝试了gradle 2.2.1和2.5.
您需要使用FileTree而不是FileCollection:
compile fileTree(dir:'lib', include:'*.jar')
eclipse和gradle表现不同的原因很可能是因为你没有运行gradle eclipse
(一个由eclipse插件添加的任务)。Eclipse不与您的构建交互。一点也不自然。
我很难找到这个问题,所以我将保留我自己的问题,并写下解决问题的方法。
很明显,有一些不同的行为使得命令行gradle在组合路径和通配符时升级。
这是正确的语法,适用于Eclipse和gradle命令行:
dependencies {
compile fileTree(dir: 'lib', include: ['*.jar'])
}
我从stackoverflow上的另一篇文章中找到了这篇文章,这篇文章是我在最初的研究中没有找到的。