首页 > 解决方案 > 使用 Maven 存储库进行 Gradle 离线构建

问题描述

我正在尝试设置离线 Gradle 构建。

理想情况下,我希望将我的所有项目依赖项都放在一个任意的 Maven 存储库中,如下所示:

repositories {
    maven {
        url 'file://PATH/TO/REPO'
    }
}

但是,在全新的 Gradle 安装(没有 ~/.gradle 缓存)中,上述操作失败,原因如下:

* What went wrong
Plugin [id: PLUGINID, version: PLUGINVERSION] was not found in any of the 
following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolvee plugin artifact     'PLUGINID:PLUGINNAME:PLUGINVERSION')
    Searched in the following repositories: 
        Gradle Central Plugin Repository 

我尝试了几种不同的方法来指定存储库,包括:

  1. 将“url ...”替换为“flatDir { dir '/PATH/TO/REPO' }”。
  2. 将所有依赖项复制到 ~/.m2 并调用 mavenLocal() 作为存储库。

要将依赖项从 ~/.gradle/caches/modules-2/files-2.1/ 复制到我的“离线”存储库中,我尝试过:

  1. 直接复制/粘贴
  2. 一个 Gradle 任务,它将结构转换为:

    task cacheLocal(type: Copy) {
        from new File(gradle.gradleUserHomeDir, 'caches/modules-2/files-2.1')
        into '/PATH/TO/REPO'
        eachFile {
            List<String> parts = it.path.split('/')
            it.path = (parts[0] + '/' + parts[1]).replace('.','/') + '/' + parts[2] + '/' + parts[4]
        }
        includeEmptyDirs = false
     }
    

其他事情:

我的插件块(上面的错误语句将命中第一个非 Gradle 核心插件,因此在这种情况下是 protobuf):

plugins {
    id "com.google.protobuf" version "0.8.6"
    id "nebula.ospackage" version "4.9.3"
    id "java"
    id "eclipse"
}

这超出了我的深度,任何帮助将不胜感激!

标签: javaandroidmavengradlegroovy

解决方案


如果您还希望从本地存储库中解析插件,则必须配置该pluginManagement部分才能这样做。在您的问题中,您似乎只配置了项目存储库。

请参阅文档中的示例


推荐阅读