О моем любимом Gradle.
Имеем мы, значит, официальный туториал Spring о том, как настроить генерацию JAXB. Идем по нему, вставляем в наш build.gradle строки из туториала и - все работает 🙂. Строки такие:
task genJaxb {
ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
ext.schema = "src/main/resources/countries.xsd"
...И все бы ничего, но
${buildDir} самим Gradle объявлена deprecated, и здравствуй вечный WARNING при сборке проекта, а в будущем - и невозможность перейти на какой-нибудь Gradle 9 или 10. Сейчас я на 8.6. Что может быть проще загуглить на что предлагают заменить
${buildDir} сами разработчики gradle? И есть официальный док, который дает нам ответы на этот вопрос:Deprecations
Deprecated Project.buildDir is to be replaced by Project.layout.buildDirectory
The Project.buildDir property is deprecated. It uses eager APIs and has ordering issues if the value is read in build logic and then later modified. It could result in outputs ending up in different locations.
It is replaced by a DirectoryProperty found at Project.layout.buildDirectory. See the ProjectLayout interface for details.
И есть даже пример кода:
было:
file("$buildDir/myOutput.txt")стало:
layout.buildDirectory.file("myOutput.txt")Ну, все просто, но кажется
.file в нашем случае лучше заменить .dir. Пишем:tasks.register('genJaxb') {
ext.sourcesDir = "${Project.layout.buildDirectory}/generated-sources/jaxb"
ext.classesDir = "${Project.layout.buildDirectory}/classes/jaxb"
...Собираем проект, и ошибка:
`No such property: layout for class: org.gradle.api.Project
Possible solutions: layout`
ОКЕЙ, пробуем по-другому
ext.sourcesDir = "${layout.buildDirectory}/generated-sources/jaxb"
ext.classesDir = "${layout.buildDirectory}/classes/jaxb"
...и классы генерятся в
niffler-gateway/property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/dmitriitucs/IdeaProjects/qg/niffler/niffler-gateway/build))/generated-sources - уже лучше, есть прогресс, но хотелось то в build/generated-sources🙂Идем дальше
ext.sourcesDir = layout.buildDirectory.dir("generated-sources/jaxb").toString()
ext.classesDir = layout.buildDirectory.dir("classes/jaxb").toString()- ну вот это-то должно нам дать строку с путем к папке?
результат опять с таким путем:
niffler-gateway/map(org.gradle.api.file.Directory property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/dmitriitucs/IdeaProjects/qg/niffler/niffler-gateway/build)) org.gradle.api.internal.file.DefaultFilePropertyFactory$PathToDirectoryTransformer@4fe6e613)/guru/qa/niffler/userdata/wsdlКОРОЧЕ ВОПРОС. Кто знает как это прописать чтоб работала
mkdir и создавала папку тупо build/generated-sources🙂?? Ни чатгпт, ни гугл пока не помогли. Так и живем с Gradle 🙂