【发布时间】:2017-08-05 13:09:33
【问题描述】:
请注意:虽然我在这里特别提到了两个 Gradle 插件,但这 100% 是关于理解 Gradle 中的任务依赖关系的问题,不需要个别插件(我认为)!
我有一个项目将使用两个 Gradle 插件:
-
Gradle Shadow plugin,它将生成一个自包含的“胖 jar”(基本上是一个大 jar,其中包含我所有的类以及所有传递依赖项的类,然后我可以运行
java -jar myapp.jar而无需管理 jar 的外部类路径等)。这将在build/libs/myapp.jar处生成一个胖罐子;和 - Gradle Launch4J plugin,它在后台使用 Launch4J 将 jar 转换为本机可执行文件(EXE 等)。 很明显,胖罐子必须在 Launch4J 任务运行之前创建,否则它们将没有任何东西可以包装在 EXE 中!
这是我的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
这里的意图是我希望首先创建胖罐子(在shadowJar 运行时调用),然后然后让 Launch4J 启动(当@ 987654329@ 运行)。但是当我运行它时,我得到以下异常:
: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 shadowJar
标签: gradle gradle-plugin