作爲一家軟件公司,我們被要求提供軟件及其所有依賴項。依賴關係應該被髮布到另一個artifactory。換句話說,我們希望從我們的工具中獲取所有項目的依賴關係,並將它們發佈到另一個工具中,以使客戶端能夠構建軟件。Gradle - 將所有項目的依賴關係發佈到其他Artifactory
有沒有辦法在Gradle中做到這一點?
作爲一家軟件公司,我們被要求提供軟件及其所有依賴項。依賴關係應該被髮布到另一個artifactory。換句話說,我們希望從我們的工具中獲取所有項目的依賴關係,並將它們發佈到另一個工具中,以使客戶端能夠構建軟件。Gradle - 將所有項目的依賴關係發佈到其他Artifactory
有沒有辦法在Gradle中做到這一點?
public class MavenArtifactCopyTask extends DefaultTask {
@Input
List<Configuration> configurations;
@OutputDirectory
File repoDir
@TaskAction
void build() {
for (Configuration configuration : configurations) {
copyJars(configuration)
copyPoms(configuration)
}
}
private void copyJars(Configuration configuration) {
configuration.resolvedConfiguration.resolvedArtifacts.each { artifact ->
def moduleVersionId = artifact.moduleVersion.id
File moduleDir = new File(repoDir, "${moduleVersionId.group.replace('.','/')}/${moduleVersionId.name}/${moduleVersionId.version}")
GFileUtils.mkdirs(moduleDir)
GFileUtils.copyFile(artifact.file, new File(moduleDir, artifact.file.name))
}
}
private void copyPoms(Configuration configuration) {
def componentIds = configuration.incoming.resolutionResult.allDependencies.collect { it.selected.id }
def result = project.dependencies.createArtifactResolutionQuery()
.forComponents(componentIds)
.withArtifacts(MavenModule, MavenPomArtifact)
.execute()
for(component in result.resolvedComponents) {
def componentId = component.id
if(componentId instanceof ModuleComponentIdentifier) {
File moduleDir = new File(repoDir, "${componentId.group.replace('.','/')}/${componentId.module}/${componentId.version}")
GFileUtils.mkdirs(moduleDir)
File pomFile = component.getArtifacts(MavenPomArtifact)[0].file
GFileUtils.copyFile(pomFile, new File(moduleDir, pomFile.name))
}
}
}
}
使用
task copyMavenArtifacts(type: MavenArtifactCopyTask) {
configurations = [project.configurations.all, project.buildScript.configurations.classpath]
repoDir = file("$buildDir/mavenArtifacts")
}
一旦所有的罐子&勁歌是在Maven的目錄結構,你可以在本地文件夾改編
我幾乎得到了我想要的地方,使用你的建議。謝謝! 然而,問題在於我不知道如何獲得POM的母體POM。有任何想法嗎? – Cleankod
嗯...可以從'configuration.incoming.resolutionResult.allComponents'獲取id而不是'configuration.incoming.resolutionResult.allDependencies'(參見[getAllComponents()](https://docs.gradle.org/3.4/ javadoc/org/gradle/api/artifacts/result/ResolutionResult.html#getAllComponents%28%29)) –
讓我知道它是否有效。我可能會爲此發佈一個插件 –
的問題是,我不能複製所有的庫,但只的那些項目的依賴。 – Cleankod