请注意:虽然我在这里特别提到了两个Gradle插件,但这完全是一个关于理解Gradle中任务依赖性的问题,不需要任何关于单个插件的知识(我认为)!
我有一个项目将使用两个Gradle插件:
这是我的build.gradle
:
import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer
plugins {
id 'groovy'
id 'application'
id 'maven-publish'
id 'com.github.johnrengelman.shadow' version '1.2.3'
id 'edu.sc.seis.launch4j' version '2.3.0'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
group = 'hotmeatballsoup'
mainClassName = 'com.me.myapp.Driver'
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile(
'org.codehaus.groovy:groovy-all:2.4.7'
,'org.slf4j:slf4j-api:1.7.24'
,'org.slf4j:slf4j-simple:1.7.24'
)
}
manifest {
attributes 'Main-Class': mainClassName
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
baseName = 'zimbus'
}
shadowJar {
transform(ServiceFileTransformer) {
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
exclude 'LICENSE*'
}
transform(com.github.jengelman.gradle.plugins.shadow.transformers.AppendingTransformer) {
resource = 'reference.conf'
}
classifier = ''
}
publishing {
publications {
shadow(MavenPublication) {
from components.shadow
artifactId = 'zimbus'
}
}
}
launch4j {
outfile = 'zimbus.exe'
mainClassName = 'com.me.myapp.Driver'
icon = 'zimbus.ico'
jar = 'build/libs/gradle-launch4j-example.jar'
}
在命令行中,我运行:
./gradlew clean build shadowJar createAllExecutables
这里的意图是,我希望首先创建fat jar(在< code>shadowJar运行时调用),然后启动4J(在< code > createAllExecutables 运行时调用)。但是当我运行它时,我得到了下面的异常:
:createExe FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':createExe'.
> Launch4J finished with non-zero exit value 1
launch4j: Application jar doesn't exist.
我很确定createAllExecutables
任务是在shadowJar
任务之前触发的,因此没有任何东西(没有胖罐)可以捆绑在EXE中。
有人能证实我的怀疑,并帮助我定义将正确排序任务的dependsOn
声明吗?或者,如果任务以正确的顺序执行,可以提供一些关于导致错误的原因的想法吗?
一旦你写了
createAllExecutables.dependsOn阴影罐
您将定义createAllExecutables任务和shadowJar之间的依赖关系,这意味着每次Gradle决定调用<code>CreateAlleExecutables</code>(例如,因为您将其传递到命令行,否则其他任务将依赖它)<code>shadowJar</code>也将添加到任务图中。因此,在这种情况下,当您调用gradle createAllExecutables
时,也将执行shadowJar
。
但是你也可以写
createAllExecutables。必须在暗影罐后运行
在这种情况下,你不会在任务之间引入任何依赖关系,但是你会告诉Gradle这两个任务的预期顺序。在这种情况下,一旦调用< code > gradle createAllExecutables ,就不会执行< code>shadowJar。
我认为 dependsOn
关系更适用于您的情况,因为为了创建可执行文件,您需要已经有胖 jar,因此这取决于关系,而不是必须运行。
我有什么? 现在我想知道在任务执行之前是否可以使用clean task(常见的构建任务)来清理构建目录。 这背后是有原因的,我想确保每次gradle都应该编译java文件,并且所有.class文件都应该被刷新(这是一些要求) 我试过什么? 我想知道什么? 有没有什么方法可以避免编写包装器任务,并做一些梯度魔术来达到要求?
1.11级给我一个弃用警告: Gradle2.0的构建失败: 我已经按照http://www.cradle.org/docs/current/userguide/java_plugin.html#sec%3asource_sets中的描述定义了源集,这样做是因为我的项目没有遵循默认的项目布局。 我确实定义了一些依赖项,但没有定义;这只是一个简单的枚举,用作代码生成的基础。它没有依赖关系。即使我像下
我有一个任务列表,它们之间有依赖关系,我正在考虑如何使用JGraphT来管理任务的顺序。我会将图形设置为有向图,并在处理顶点时删除顶点(或者我应该屏蔽它们吗?如果我一次只执行一个任务,我可以使用,但我希望并行化这些任务。我可以获取并检查直到我找到尽可能多的我想要执行一次,但理想情况下,会有像这样的东西。我看到Netflix提供了一个获取叶顶点的实用程序,所以我可以反转图形并使用它,但它可能不值得。
我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,
我最近开始实现Gradle发布插件。我已经经历了https://github.com/researchgate/gradle-release#custom-释放步骤。 该插件正在将SNAPSHOT版本更新为发布版本,将当前SNAPSHOT版本更新为下一个版本。gradle发布任务也在执行编译、构建步骤。我在Jenkins中自动执行了此操作。我尝试了“构建任务 = []" 但构建任务仍已执行。我找不