我有一个Gradle项目,其中包含从Nexus存储库下载的依赖项。 我希望获得jar和zip文件的依赖之一。
jar(" name-version.jar")可通过以下方式轻松获得:
dependency {
compile 'group:name:version'
}
但是我想要的其他工件的名称如下: " name-version-config.zip"
如何从存储库中获取此工件? 我需要这个工件来获取其中的一些文件以在我的包/分发任务中使用。
我已经尝试创建一个新配置并进行如下配置:
configurations {
zipConfig
}
dependencies {
...
compile group: <group>, name: <name>, version: <version>
zipConfig group: <group>, name: <name>, version: <version> + '-config', ext: 'zip'
}
但是这会失败,因为gradle将尝试使用错误的路径找到正确的文件名:&#34; group / name / version-config / name-version-config.zip&#34;我需要它来搜索&#34; group / name / version / name-version-config.zip&#34;
中的文件答案 0 :(得分:1)
在Maven中,我们可以使用分类器生成工件。为了让Gradle下载一个带分类器的特定文件,我定义了一个名为zipConfig的新配置,并按如下方式声明了依赖项:
configurations {
zipConfig
}
dependencies {
...
zipConfig group:'<group>', name:<name>, version:<version>, ext:'zip', classifier:'config'
}
要提取zip工件的文件并将它们复制到我的包中,我定义了一个解压缩文件并将其中的文件复制到build / resources文件夹中的任务。
task unzipConfig(type: Copy) {
def sdkServerPattern = ".*" + sdkServer + ".*config.*"
def pattern = ~/$sdkServerPattern/
def configZipTree = zipTree(configurations.zipConfig.filter{it.name.matches(pattern)}.singleFile)
from configZipTree
include '**/*filename1'
include '**/*filename2'
into(project.buildDir.path + '/resources')
}
在项目的“打包”任务中(所有内容都打包到.tar.gz文件中),资源文件夹中的文件被引用以打包在一起。
task pack(type: Tar, dependsOn: unzipConfig) {
dependsOn build
compression = Compression.GZIP
extension = 'tar.gz'
from(configurations.runtime.allArtifacts.files) {
into('/lib')
}
from(configurations.runtime) {
into('/lib')
}
def sdkConfigFolderName = 'build/resources/' + sdkServer + '-' + sdkServerVersion + '/config/'
from sdkConfigFolderName + 'filename1'
from sdkConfigFolderName + 'filename2'
baseName = project.name + '-distribution'
}
答案 1 :(得分:0)
您可以编写一个gradle任务,将zip文件下载到本地目录,然后按名称将下载的文件用作依赖项。
或者您可以使用自定义常春藤模式并将URL视为自定义布局常春藤存储库以获取zip文件。见here