引用静态库目录 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.
同步
我使用 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.