Gradle中的特定于配置的依赖管理部分

时间:2018-09-05 08:42:02

标签: docker gradle dependency-management

我试图将两个项目(项目1和项目2)打包到同一个docker映像中,并在单独的文件夹中使用它们自己的依赖项。为此,我使用了第三个项目,即部署,该项目负责创建docker映像。我为不同的Gradle项目使用不同的依赖项版本时遇到以下问题:在项目中(部署)创建新配置并将另一个项目(项目1或2)的依赖项添加到新创建的配置的依赖项中时,的部署应用于配置依赖项,而不是项目1的dependencyManagement。

感谢您的帮助。

我的用例如下:

  • 根项目---为所有项目定义一个Spring Platform importBom

    allprojects {
    dependencyManagement {
        imports {
            mavenBom "<spring-platform-bom>"
        }
    }
    

    }

  • 部署项目---其目的是将项目1和项目2打包到一个Docker映像中,其依赖项位于单独的文件夹中:

    private static Task createDeploymentTask(entry, configurationName, project) { //project = deployment, entry = Map.Entry of {project1, project1ConfigurationName}
        project.getConfigurations().create(configurationName)
        project.getDependencies().add(configurationName, entry.getKey()) //how do I get only the dependencies of project1 ?
    
        project.task("${configurationName}Task", type: Copy) {
        into "${project.buildDir}/docker/libs/${entry.getValue()}"
        from project.configurations."${configurationName}"
        }
    }
    
  • 子项目1 ---使用Spring Paltform BOM中的番石榴(例如番石榴20)

    dependencies {
      compile 'com.google.guava:guava'
    

    }

  • 子项目2使用了较新的番石榴版本

    dependencyManagement {
      dependencies {
        dependency 'com.google.guava:guava:26.0-jre'
      }
    }
    
    dependencies {
      compile 'com.google.guava:guava'
    }
    

其结果是,项目1和项目2都具有构成Spring BOM的番石榴20,而不是项目2具有番石榴26版本。

如果我将这个部分添加到部署项目中,则:

dependencyManagement {
   dependencies {
        dependency 'com.google.guava:guava:26.0-jre'
   }
}

然后项目1和项目2都有番石榴26,我不想要。

0 个答案:

没有答案