【问题标题】:Download Gradle dependencies with ".modules" files使用“.modules”文件下载 Gradle 依赖项
【发布时间】:2021-02-20 20:39:45
【问题描述】:

我目前有一个离线环境,其中有我所有的依赖项(jar、aar 和 pom 文件)。问题是我想在我的 Android 项目中使用 Coil(图像库)作为依赖项。这个库需要kotlinx-coroutines-core 也可以下载到我的环境中。我已经能够下载除.module 文件(Gradle 模块元数据)之外的所有必需文件,这是必需的,因为kotlinx-coroutines-core 有多种变体(JVM、JS 和 Native 的版本)。

换句话说,我的代码下载了kotlinx-coroutines-core-jvm-1.3.9.jar(及其POM)和kotlinx-coroutines-core-1.3.9.pom,这很好,但kotlinx-coroutines-core-1.3.9.module文件仍然丢失,我不知道如何下载它。

这是我基于this gist的代码:

task copyDependencies() {
    def name = "default"
    def configuration = configurations.getByName(name)
    copyJars(configuration)
    copyPoms(configuration)
}

private void copyJars(Configuration configuration) {
    File repoDir = new File(project.buildDir, 'repository')

    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 repoDir = new File(project.buildDir, 'repository')
            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))
        }
    }
}

所以我的问题是:下载依赖项时如何下载.module 文件?一个例子是下载这个file

【问题讨论】:

    标签: maven gradle groovy


    【解决方案1】:

    要将配置文件复制到目录,您可以这样做:

    task copyLibs(type: Copy) {
        from configurations.runtimeClasspath
        into file("$buildDir/repository")
    }
    

    这将复制所有内容,包括传递依赖项。

    不需要自己编写所有代码。为什么要在应用程序的类路径中使用 POM 和所有这些?让 Gradle 为您解决。

    【讨论】:

    • 不确定我是否已经解释过了。我的目标是创建一个离线 gradle 存储库,多个项目可以指向并获取它们的依赖项。我在没有互联网访问(公司安全政策)的离线环境中工作,所以我正在尝试创建我自己的具有一些依赖项的 maven 存储库版本。如果没有 POM 文件,gradle 会抱怨它们丢失并且无法解决依赖关系。此设置当前运行良好,除非有依赖于 Gradle 模块元数据文件的依赖项(在这种情况下,它是传递依赖项)。
    • 您需要做的基本上是在有可用互联网时解决依赖关系,然后将 Gradle 依赖关系缓存复制到您需要的任何环境中。 Gradle 可以在离线模式下运行,在这种情况下,它应该只使用缓存的依赖项......您尝试做的事情是困难且不可靠的。如果离线构建不起作用,请检查可以为您执行此操作的 this plugin
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2015-03-20
    • 2023-04-08
    • 2016-11-23
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2020-07-04
    相关资源
    最近更新 更多