gradle 从最终 jar 中不可用的任务生成的文件
gradle generated file from a task not available in final jar
我已经在 Android Studio 中设置了一些编译 libGdx 项目的任务。我想要的是,在资产文件夹中创建一个动态文件“version.txt”。该文件必须在最终的 jar 输出中可用。
我是这样设置的:
libGdx 给我提供了 dist
任务。
我在此基础上创建了两个任务:buildDebugVersion
和 buildReleaseVersion
.
两者都应创建一个 version.txt
,一个包含调试信息,另一个不包含调试信息。
libGdx'原始dist任务
task dist(type: Jar) {
manifest {
attributes 'Main-Class': project.mainClassName
}
//processResources.dependsOn tasks.updateVersionFileRelease
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}
我的debug/release任务
task createDebugVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(1)
}
}
task createReleaseVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(0)
}
}
任务相关性
为了让所有这些都按正确的 运行ning 顺序,我创建了
createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
dist.mustRunAfter(tasks.createDebugVersion, tasks.createReleaseVersion)
我的期望是:
- 创建debug/release 运行s 并创建文件
- THEN dist 运行s
当我查看输出时,这似乎发生了。可以看到,生成了什么文件:
这是我 运行 时的输出:
> Task :desktop:createReleaseVersion
Generated version file is:
--------------------------
Version=0.1.113
BuildDate=2020-04-24
--------------------------
BUILD SUCCESSFUL in 5s
10 actionable tasks: 9 executed, 1 up-to-date
...但是当我运行程序时,我看到这个版本信息:
jar 中包含的文件总是落后1 或 2 个版本,就好像它已经从某个缓存文件夹中取出一样。
让我害怕的是这个问题:有多少其他资产现在也落后 1 或 2 个版本?
gradle 从哪里获取这个文件?
到目前为止我没能找到它。
我已经尝试过的
我 运行 通过 .cmd
脚本。在开始 gradle 任务之前,我已经删除了所有构建文件夹(并对其进行了测试,在构建开始之前删除了所有内容)
(变量 %TASK% 包含 createDebugVersion
或 createReleaseVersion
)
ECHO Forcing resources rebuild
RD /S /Q .\desktop\build
RD /S /Q .\android\build
ECHO Compiling distribution version of %GAMENAME%...
CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks
但是,在某些“ghost-galaxy-space”中,从某处获取了两个旧版本的文件并放入 jar...
任何帮助非常感谢!
好的,我想通了 - 如果其他人 运行 遇到类似的问题,也许它可以帮助他们。
错误在这里:
CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks
如果仔细观察,您会看到第一个 desktop:clean
运行,然后 desktop:build runs
,由于删除了缓存和构建文件夹而导致完全重建,然后是我的%TASK%
运行s - 顺序为 第三!
所以,我的任务 运行s 在 构建之后。即使我用
建立构建链
createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
这一切仅 运行s 构建完成后。 dist
任务在此构建链中没有 clean
,因此它使用我的 gradlew
调用的第二个参数生成的构建输出!
解决方案
我只是改变了我的方式 运行 gradlew
:
我的命令脚本现在调用
call gradlew desktop:clean %TASK% --rerun-tasks
所以 clean
仍然是强制的,但是 build
只是作为 dist
的反应而发生的,因为它找不到任何二进制文件,所以它必须正确构建它们现在。
然后 然后 构建最终 运行s 在 我的文件被写入资产文件夹后
希望有一天这对某人有所帮助!
干杯,格里斯
我已经在 Android Studio 中设置了一些编译 libGdx 项目的任务。我想要的是,在资产文件夹中创建一个动态文件“version.txt”。该文件必须在最终的 jar 输出中可用。
我是这样设置的:
libGdx 给我提供了 dist
任务。
我在此基础上创建了两个任务:buildDebugVersion
和 buildReleaseVersion
.
两者都应创建一个 version.txt
,一个包含调试信息,另一个不包含调试信息。
libGdx'原始dist任务
task dist(type: Jar) {
manifest {
attributes 'Main-Class': project.mainClassName
}
//processResources.dependsOn tasks.updateVersionFileRelease
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}
我的debug/release任务
task createDebugVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(1)
}
}
task createReleaseVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(0)
}
}
任务相关性
为了让所有这些都按正确的 运行ning 顺序,我创建了
createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
dist.mustRunAfter(tasks.createDebugVersion, tasks.createReleaseVersion)
我的期望是:
- 创建debug/release 运行s 并创建文件
- THEN dist 运行s
当我查看输出时,这似乎发生了。可以看到,生成了什么文件:
这是我 运行 时的输出:
> Task :desktop:createReleaseVersion
Generated version file is:
--------------------------
Version=0.1.113
BuildDate=2020-04-24
--------------------------
BUILD SUCCESSFUL in 5s
10 actionable tasks: 9 executed, 1 up-to-date
...但是当我运行程序时,我看到这个版本信息:
jar 中包含的文件总是落后1 或 2 个版本,就好像它已经从某个缓存文件夹中取出一样。
让我害怕的是这个问题:有多少其他资产现在也落后 1 或 2 个版本? gradle 从哪里获取这个文件?
到目前为止我没能找到它。
我已经尝试过的
我 运行 通过 .cmd
脚本。在开始 gradle 任务之前,我已经删除了所有构建文件夹(并对其进行了测试,在构建开始之前删除了所有内容)
(变量 %TASK% 包含 createDebugVersion
或 createReleaseVersion
)
ECHO Forcing resources rebuild
RD /S /Q .\desktop\build
RD /S /Q .\android\build
ECHO Compiling distribution version of %GAMENAME%...
CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks
但是,在某些“ghost-galaxy-space”中,从某处获取了两个旧版本的文件并放入 jar...
任何帮助非常感谢!
好的,我想通了 - 如果其他人 运行 遇到类似的问题,也许它可以帮助他们。
错误在这里:
CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks
如果仔细观察,您会看到第一个 desktop:clean
运行,然后 desktop:build runs
,由于删除了缓存和构建文件夹而导致完全重建,然后是我的%TASK%
运行s - 顺序为 第三!
所以,我的任务 运行s 在 构建之后。即使我用
建立构建链createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
这一切仅 运行s 构建完成后。 dist
任务在此构建链中没有 clean
,因此它使用我的 gradlew
调用的第二个参数生成的构建输出!
解决方案
我只是改变了我的方式 运行 gradlew
:
我的命令脚本现在调用
call gradlew desktop:clean %TASK% --rerun-tasks
所以 clean
仍然是强制的,但是 build
只是作为 dist
的反应而发生的,因为它找不到任何二进制文件,所以它必须正确构建它们现在。
然后 然后 构建最终 运行s 在 我的文件被写入资产文件夹后
希望有一天这对某人有所帮助! 干杯,格里斯