我已经在Android Studio中设置了一些编译libGdx项目的任务。我要的是在 Assets 文件夹中创建一个动态文件“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
}
我的调试/发布任务task createDebugVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(1)
}
}
task createReleaseVersion {
outputs.upToDateWhen { false }
doFirst {
modifyVersionFile(0)
}
}
任务依赖为了使一切正确运行,我创建了
createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
dist.mustRunAfter(tasks.createDebugVersion, tasks.createReleaseVersion)
我的期望是:当我查看输出时,似乎发生了这种情况。您可以看到生成了什么文件:
这是我运行它时的输出:
> 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个版本,就好像它已从某些缓存文件夹中取出一样。
问题让我感到恐惧:现在还有多少其他 Assets 落后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
但是,仍然从某些“鬼影星系空间”中,从某个地方取出了两个旧版本的文件,并将其放入 jar 中...任何帮助,不胜感激!
最佳答案
好的,我想通了-如果其他人遇到类似问题,也许对其他人有帮助。
错误在这里:
CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks
如果仔细观察,您会看到第一个desktop:clean
运行,然后THEN desktop:build runs
运行,由于已删除缓存和构建文件夹,这将导致完全重建,然后我的%TASK%
运行-依次为和第三个!因此,我的任务在构建后运行。即使我建立了构建链
createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)
所有这些仅在构建完成后才运行。而且dist
任务在此构建链中没有clean
,因此它使用由我的gradlew
调用的第二个参数生成的构建输出!解决方案
我只是改变了运行
gradlew
的方式:我的命令脚本现在调用
call gradlew desktop:clean %TASK% --rerun-tasks
因此clean
仍然是强制性的,但是build
仅作为dist
的响应而发生,因为它找不到任何二进制文件,因此必须立即构建它们。然后,在将我的文件写入 Assets 文件夹之后,构建最终运行。
希望有一天能对某人有所帮助!
欢呼,格里斯
关于gradle - gradle从最终jar中不可用的任务生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61402916/