TGViewer
LikeaDuck🦆 LikeaDuck🦆 @likeaduck · 1.41K subscribers
Post #93 1.83K
#gradle

О моем любимом 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 🙂
Getting Started | Producing a SOAP web service Learn how to create a SOAP-based web service with Spring.
  • 👍 1
  • 😁 1
More from @likeaduck
  1. May 31, 2026Последние три дня связаны с конференцией Codefest'16 - для меня это была крайне редкая кон…
  2. May 12, 2026В семье все заболели. После конференции сказался, видимо, недосып и усталость, иммунитет о…
  3. Apr 29, 2026Любопытный факт: Оказалось, я на втором месте по числу выступлений на Heisenbug за все вре…
  4. Apr 22, 2026Неделя в Москве - тимбилдинг со своими командами (на фото героическая QA-core команда, кот…
  5. Apr 21, 2026Впервые за год в TG написал рекрутер, спросил интересно ли обсудить позицию руководителя к…
  6. Mar 17, 2026Кстати fun fact о накрутке опыта: В QA.GURU мне дали посмотреть резюме (оценить и, возможн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →