Gradle-发布所有项目';s对另一个工件的依赖关系

Gradle-发布所有项目';s对另一个工件的依赖关系,gradle,artifactory,Gradle,Artifactory,作为一家软件公司,我们被要求交付软件及其所有依赖项。依赖项应该发布到另一个工件。换句话说,我们希望从我们的工件中获取项目的所有依赖项,并将它们发布到另一个工件中,以使客户能够构建软件 在Gradle中有这样做的方法吗?您可以使用从 一旦所有jar和pom都位于maven目录结构中的本地文件夹中,您就可以 将它们全部上载到另一个存储库 将该文件夹用作maven存储库 问题是我无法复制所有库,而只能复制项目所依赖的库。根据您的建议,我几乎达到了我想要的目的。谢谢然而,问题是我不知道如何获得POM的父

作为一家软件公司,我们被要求交付软件及其所有依赖项。依赖项应该发布到另一个工件。换句话说,我们希望从我们的工件中获取项目的所有依赖项,并将它们发布到另一个工件中,以使客户能够构建软件


在Gradle中有这样做的方法吗?

您可以使用从

一旦所有jar和pom都位于maven目录结构中的本地文件夹中,您就可以

  • 将它们全部上载到另一个存储库
  • 将该文件夹用作maven存储库

  • 问题是我无法复制所有库,而只能复制项目所依赖的库。根据您的建议,我几乎达到了我想要的目的。谢谢然而,问题是我不知道如何获得POM的父POM。有什么想法吗?嗯。。。prehaps从
    configuration.incoming.resolutionResult.allComponents
    而不是
    configuration.incoming.resolutionResult.allDependencies
    (请参阅)获取id,并告知其是否有效。我可能会为此发布一个插件
    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")
    }