相关疑难解决方法(0)

从Gradle构建脚本中提取常用方法

我有一个Gradle构建脚本(build.gradle),我在其中创建了一些任务.这些任务主要包括方法调用.被调用的方法也在构建脚本中.

现在,情况如下:

我正在创建相当数量的构建脚本,其中包含不同的任务,但使用原始脚本中的相同方法.因此,我想以某种方式提取这些"常用方法",因此我可以轻松地重复使用它们,而不是为我创建的每个新脚本复制它们.

如果Gradle是PHP,那么以下内容将是理想的:

//script content
...
require("common-methods.gradle");
...
//more script content
Run Code Online (Sandbox Code Playgroud)

但当然,这是不可能的.或者是吗?

无论如何,我怎样才能达到这个结果?这样做的最佳方法是什么?我已经阅读了Gradle文档,但我似乎无法确定哪种方法最简单,最适合这种方法.

提前致谢!


更新:

我设法在另一个文件中提取方法

(使用apply from: 'common-methods.gradle'),

所以结构如下:

parent/
      /build.gradle              // The original build script
      /common-methods.gradle     // The extracted methods
      /gradle.properties         // Properties used by the build script
Run Code Online (Sandbox Code Playgroud)

执行任务后build.gradle,我遇到了一个新问题:显然,方法在进入时无法识别common-methods.gradle.

关于如何解决这个问题的任何想法?

gradle build.gradle

76
推荐指数
3
解决办法
2万
查看次数

有没有办法分割/分解Gradle构建的常见部分

我们有几个独立的构建(每个独立构建是一个多项目构建).主要的构建脚本变得非常大,因为我们有一组子项目重用的常见任务,以及独立构建之间有很多重复.我们要找的是:

  1. 一种将主构建文件拆分为较小文件的方法
  2. 一种在其他独立构建中重用构建的某些部分的方法

在Gradle中实现这一目标的最佳方法是什么?

build-process gradle

50
推荐指数
2
解决办法
3万
查看次数

如何找到当前gradle脚本的路径?

我们在中心点使用一些Gradle基础脚本.此脚本包含在大量脚本中的"apply from:"中.此基本脚本需要访问相对于脚本的文件.如何找到基本脚本的位置?

一个build.gradle的示例:

apply from: "../../gradlebase/base1.gradle"
Run Code Online (Sandbox Code Playgroud)

base1.gradle的示例

println getScriptLocation()
Run Code Online (Sandbox Code Playgroud)

file gradle

11
推荐指数
3
解决办法
9978
查看次数

Android Studio - Gradle - 具有嵌套依赖项的多项目构建

我问这个这个前质疑很长一段时间,现在我有时间(没有选择)我已经通过我的一些项目的设立工作我的方式.

结构类似于前一个问题中的结构,但有一个扭曲......

?Just a folder
?
??? Project 1 - (Pure Java Modules)
?    ?
?    ??? Module A1
?    ??? Module B1
?    :
?    ??? Module Z1
?  
??? Project 2 - (Android Libraries Modules)
?    ?
?    ??? Module A2
?    ??? Module B2
?    :
?    ??? Module Z2
?  
??? Actual Android Project
Run Code Online (Sandbox Code Playgroud)

所有子模块都依赖于前一个模块,例如Z1取决于X1 ...... B1取决于A1,同样适用于{X} 2系列.

由于我有多个项目依赖于相同的顶级库(Z2,Z1),我想节省我的痛苦和文本,并尽可能避免在项目中重复以下内容:

在设置文件中:

include ':project1', ':project1:A1', ':project1:B1',..., ':project1:Z1'
include ':project2', ':project2:A2', ':project2:B2',..., ':project2:Z2'
project(':project1').projectDir = …
Run Code Online (Sandbox Code Playgroud)

dependencies android gradle android-studio android-gradle-plugin

6
推荐指数
0
解决办法
1076
查看次数

无法在 build.gradle 以外的 gradle 文件中导入第三方类

我想org.ajoberstar.grgit.Grgit在 gradle 文件中导入第三方类version.gradle。但是它给了我一个错误,它无法解析类 org.ajoberstar.grgit.Grgit(我apply from: "version.gradle"在 build.gradle 中使用)。但是如果我将它导入build.gradle,它就可以正常工作。这是我在做什么:

构建.gradle:

plugins {
  id "org.ajoberstar.grgit" version "1.5.0"
}
apply from: "version.gradle"

// Version of jar file.
version = 1.0

jar
 {
  destinationDir = file(JAR_DIR)
  from {
    (configurations.runtime).collect {
      it.isDirectory() ? it : zipTree(it)
    }
  }
  manifest {
    attributes 'Main-Class': 'com.awesomeness.Main'
  }
}

jar.dependsOn versionTxt

// Artifact dependecies.
    dependencies {
      compile files("$TOOLS/lib/grgit-1.5.0.jar")
      compile files("$TOOLS/lib/groovy-all-2.4.7.jar")
      compile files("$TOOLS/lib/org.eclipse.jgit-4.2.0.201601211800-r.jar")
    }
Run Code Online (Sandbox Code Playgroud)

这是 version.gradle 文件:

import org.ajoberstar.grgit.Grgit
//
import java.text.DateFormat …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea gradle

5
推荐指数
1
解决办法
1469
查看次数

Gradle 中所有存储库的相同凭据

请帮助我找到解决我的问题的最佳解决方案:

在专用 LAN 网络中,我有 Nexus 存储库,我需要使用一个用户来访问存储库。

最简单的解决方案是将用户和密码添加到gradle.properties文件中,并在每个build.gradle文件和每个存储库中写入相同的代码:

maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp1.net/'
   }

maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp2.net/'
   }
Run Code Online (Sandbox Code Playgroud)

其中gradle.properties所有存储库的 mavenUser 和 mavenPassword 都相同:

mavenUser=admin
mavenPassword=admin123
Run Code Online (Sandbox Code Playgroud)

一切都很好并且工作正常,但是有很多重复的代码。

也许您知道 - 如何在一个地方为所有 Maven 存储库设置相同的凭据?我不想为所有存储库复制相同的代码。

非常感谢你!

gradle build.gradle

2
推荐指数
1
解决办法
4149
查看次数