我有一个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中实现这一目标的最佳方法是什么?
我们在中心点使用一些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) 我问这个和这个前质疑很长一段时间,现在我有时间(没有选择)我已经通过我的一些项目的设立工作我的方式.
结构类似于前一个问题中的结构,但有一个扭曲......
?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
我想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) 请帮助我找到解决我的问题的最佳解决方案:
在专用 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 存储库设置相同的凭据?我不想为所有存储库复制相同的代码。
非常感谢你!