我们目前正在组织中使用Artifactory,并且在下载整个依赖关系链时遇到了一些麻烦。例如,我们在项目中列出了以下依赖项:
compile group: 'org.jbpm', name: 'jbpm-flow-builder', version: droolsVersion
这个包依赖于一系列依赖关系,如:
jbpm-flow-builder
└───jbpm
└───kie-parent-with-dependencies
└───kie-platform-bom
└───jboss-integration-platform-bom
不幸的是,jboss-integration-platform-bom
在链中有数百个其他子依赖项。
我尝试了几种方法来下载所有必需的传递依赖项无济于事,因为我似乎没有完全遍历链,我必须构建,手动下载,上传到Artifactory,冲洗和重复。例如,这不起作用:
configurations {
compile {
transitive = true
}
}
...
task copyDependencies(type: Copy) {
from configurations.compile
into 'dependencies'
}
我无法直接访问Artifactory来执行上传,因此我需要一种有效的方法将整个依赖关系链和关联的POM下载到单个文件夹中。非常感谢任何帮助。
谢谢!
答案 0 :(得分:0)
我假设您要下载整个依赖关系树以构建项目。我建议使用更大的artifactory插件来构建gradle项目。它将下载所有项目依赖项,包括传递依赖项,构建项目,将构建工件发布到工件,以及收集和发布构建信息到artifactory。
答案 1 :(得分:0)
我能够在最初的问题中实现我所提出的要求,但是非常苛刻。首先,我清除了%userprofile%\.gradle\caches
文件夹,以确保它完全干净。
接下来,我在build.gradle
中注释掉了任何特定于内部的依赖项,并确保我的buildscript存储库和主存储库指向mavenLocal
和mavenCentral
,如下所示:
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
}
repositories {
mavenLocal()
mavenCentral()
}
从这里开始,我继续构建应用程序并让所有依赖项下载。然后,我能够编写一个快速简单的PowerShell脚本,将所有缓存的POM和JAR文件拉入临时目录:
Get-ChildItem -Recurse C:\Users\<username>\.gradle\caches\ -Filter *.pom | %{ Copy-Item $_.FullName C:\temp\jar\ }
Get-ChildItem -Recurse C:\Users\<username>\.gradle\caches\ -Filter *.jar | %{ Copy-Item $_.FullName C:\temp\jar\ }
从这里开始,我无法访问Artifactory API端点,因此我继续编写另一个快速脚本来检查Artifactory中是否存在工件,如果它们已经存在,那么脚本会将它们从文件夹中删除仅提供上传所需的工件:
function Get-Artifact($JsessionId, $SearchString) {
$session = New-Object Microsoft.Powershell.Commands.WebRequestSession
$cookie = New-Object System.Net.Cookie
$cookie.name = "JSESSIONID"
$cookie.Value = $jsessionId
$cookie.Domain = "artifactory.domain.com"
$session.Cookies.Add($cookie)
$body = @{"query" = $searchString; "search" = "quick"; "selectedRepositories" = @()} | ConvertTo-JSON
$headers = @{"Content-Type" = "application/json;charset=UTF-8"}
return ((Invoke-WebRequest -Uri http://artifactory.domain.com:8081/artifactory/ui/artifactsearch/quick -Method POST -WebSession $session -Headers $headers -Body $body).Content | ConvertFrom-Json).results.length
}
Get-ChildItem -Path C:\temp\jar | % { If((Get-Artifact -jsessionId "<session ID here>" -searchString $_.Name) -eq 0) { $_.Name } Else { Remove-Item $_.FullName } }