Во время разработки я использую стандартную функцию installDist
(из плагина application
) в build.gradle:
installDist{}
... но теперь я хочу иметь другую задачу, которая устанавливает / распространяет / развертывает «производственную» версию в производственную папку, которая также включает версию в структуру каталога. Я пробовал это:
task deployOperativeVersion( type: installDist ) {
destinationDir = file( "$productionDir/$version" )
}
Вывод сбоя сборки:
Build file '/home/mike/IdeaProjects/JavaFXExp2/Organiser/build.gradle' line: 98
* What went wrong:
A problem occurred evaluating root project 'Organiser'.
> class org.gradle.api.tasks.Sync_Decorated cannot be cast to class java.lang.Class
(org.gradle.api.tasks.Sync_Decorated is in unnamed module of loader org.gradle.
internal.classloader.VisitableURLClassLoader @aec6354; java.lang.Class is in module
java.base of loader 'bootstrap')
Похоже, что installDist
не является "типом", как в Test
.
Как мне этого добиться? Кстати, мне бы очень хотелось иметь две отдельные задачи: чтобы запустить installDist
, я обнаружил, что вам нужно всего лишь набрать ./gradlew inst
... с задачей под названием deployXXX
, достаточно было бы набрать ./gradlew depl
.
Я также попробовал это:
task deployOperativeVersion{
installDist{
destinationDir = file( "$operativeDir/$version" )
}
}
... который, кажется, ничего не сделал. И не так:
task deployOperativeVersion{
doFirst {
installDist {
destinationDir = file("$operativeDir/$version")
}
}
}
Чуть позже я подумал, что действительно нашел ответ:
task deployOperativeVersion{
dependsOn installDist{ destinationDir=file("$productionDir/$version")
}
... но к моему изумлению (смогу ли я когда-нибудь прийти к разумному пониманию Gradle до того, как ад замерзнет?), В том числе это фактически влияет на «рутинную» задачу installDist
: в частности, она мешает последней нормально работать и означает, что даже когда я запускаю installDist
, развертывание / распространение / установка все еще идет к productionDir/version
, а не к местоположению по умолчанию.
Итак, я подумал о двух задачах, каждая из которых зависит от installDist
:
task deployOperativeVersion{
dependsOn installDist{ destinationDir=file("$productionDir/$version") }
}
task stdInstall{
dependsOn installDist{ destinationDir=file("build/install") }
}
... хаха, нет радость: я бегу один, и он развертывает ОК. Затем я запускаю другой ... и получаю сообщение об ошибке:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':installDist'.
> The specified installation directory '/home/mike/IdeaProjects/JavaFXExp2/Organiser/build/install' is neither empty nor does it contain an installation for 'Organiser'.
If you really want to install to this directory, delete it and run the install task again.
Alternatively, choose a different installation directory.
... само собой разумеется, это НЕ тот случай: под ... Организатор / сборка / установка есть только один каталог, Органайзер с каталогами / bin и / lib.