2

我正在尝试将一个相当大的 Android 项目从 Maven 迁移到 Gradle,但我遇到了一些我不知道如何解决的问题。

结构如下(目前我无法控制)。

- MainModule
-- Core UI
--- UI Module 1
---- src
------ main
------- java
-- Core Logic
--- Logic Module 1
--- Logic Module 2
--- ...
-- Services
--- Service Module 1
--- Service Module 2
--- ...

主模块不包含代码。“src/main/java”结构被复制到所有其他模块(逻辑模块、服务模块、UI 模块)中。

1-我需要访问本地 Artifactory,为此我们需要输入我们的用户凭据。我有三个不同的存储库来查找工件(快照、发布和另一个我不记得的)。我需要对所有这些都使用相同的凭据。如何定义这些凭据并声明存储库并在所有 build.gradle 文件中共享存储库(使用凭据)?我或多或少明白我可以像这样定义一个存储库(和凭据):

repositories {
     maven {
         credentials {
             username "mavenUser"
             password "mavenPassword"
         }

         url "myurl"
     }
}

但是我不知道如何在所有 gradle 构建文件中共享这个定义,而且我不认为在这么多模块之间复制和粘贴是最好的主意。此外,从环境变量或 Maven 的 settings.xml 之类的东西中获取用户和密码也很有用。

2-我们需要定期发布并在本地 Artifactory 中发布工件,并让版本号自动递增,就像我们在 Maven 上所做的那样,关于如何实现这一点的任何指针?(当然,我没有研究那么多,我被困在 1 上)

3-我想在项目的所有 build.gradle 文件中共享 groupId 和版本。

4-我希望能够为多个(所有)子模块声明一次依赖项。

任何帮助表示赞赏。

4

1 回答 1

2

1a,3,4) 您可以定义一个 allProjects 或一个 subProjects 闭包,将其中的任何内容应用于所有相应的项目。例如

allprojects {
  group = "myGroup"
  version = "myVersion"

  repositories {
    maven {
      credentials {
        username "mavenUser"
        password "mavenPassword"
      }

      url "myurl"
    }
  }
}

subprojects {
  dependencies {
    compile "group:artifact:version"
  }
}

事实上,在你的根项目中给定这个 build.gradle,你不需要给你的子项目一个 build.gradle,如果它们没有什么特别之处的话。他们都会从注入的配置中获得一个组和版本,并将自动从目录名称中提取他们的名称。但是,覆盖这些默认值或添加额外的依赖项等可以照常完成。

1b)您可以将您的用户名和密码放在 gradle.properties 中:

auth.user="user"
auth.pass="pass"

然后在构建脚本中将它们称为标准变量。

于 2013-10-23T15:53:32.520 回答