Gradle сгенерированный файл из задачи, недоступной в окончательном JAR - PullRequest
1 голос
/ 24 апреля 2020

Я поставил несколько задач по компиляции проекта libGdx в Android Studio. То, что я хочу, это то, что динамический c файл "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)

Я ожидал:

  • createdebug / release запускается и создает файл
  • THEN dist run

Это, кажется, происходит, когда я смотрю на вывод. Вы можете видеть, какой файл генерируется:

Вот вывод, когда я его запускаю:

> 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

... но когда я запускаю программу, я вижу эту информацию о версии:

enter image description here

Файл, содержащийся в банке, всегда 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

Но, тем не менее, из некоторого "призрачного-галактического пространства", файл, который имеет две сборки, берется откуда-то и помещается в банку ...

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 24 апреля 2020

Хорошо, я понял это - возможно, это поможет другим, если они столкнутся с подобной проблемой.

Ошибка была здесь:

CALL gradlew desktop:clean desktop:build %TASK% --rerun-tasks

Если вы посмотрите внимательно, вы увидите ПЕРВЫЙ desktop:clean выполняется, ТОГДА desktop:build runs, что приводит к полной перестройке из-за удаленных кешей и папок сборки, и ТО мой %TASK% запускается - как третий по порядку!

Итак, моя задача запускается после сборки. Даже когда я включаю цепочку сборки с

createDebugVersion.finalizedBy(tasks.dist)
createReleaseVersion.finalizedBy(tasks.dist)

, все это запускается только после , сборка уже завершена. И задача dist не имеет clean в этой цепочке сборки, поэтому она использует выходные данные сборки, сгенерированные вторым параметром моего gradlew вызова!

Решение

I просто изменил способ запуска gradlew:

мой командный скрипт теперь вызывает

call gradlew desktop:clean %TASK% --rerun-tasks

, поэтому clean все еще принудительно, но build происходит только как реакция от dist потому что он не может найти никаких двоичных файлов, поэтому он должен создать их прямо сейчас. И затем сборка наконец запускается после мой файл был записан в папку активов.

Надеюсь, это когда-нибудь кому-нибудь поможет! ура, гри

...