После обновления до Gradle 4.x - не удалось разрешить предупреждение для проекта JEE

Я не могу избавиться от предупреждения в сборке Gradle 4.2:

Gradle now uses separate output directories for each JVM language, but this build assumes a single directory for all classes from a source set. This behaviour has been deprecated and is scheduled to be removed in Gradle 5.0
    at build_d02ctf5wwx94ec3duxv44z2cn$_run_closure3$_closure6.doCall(...\build.gradle:56)

Проекты собирают EJB-файлы, поэтому файл beans.xml должен находиться в выходной папке классов. Рекомендованное исправление, которое я нашел, состояло в том, чтобы заменить строку, упомянутую в предупреждении:

sourceSets {
  main {
    output.resourcesDir = java.outputDir
  }
  test {
    output.resourcesDir = java.outputDir
  }
}

чтобы:

sourceSets {
  main {
    output.resourcesDir = new File(buildDir, "classes/java/main")
  }
  test {
    output.resourcesDir = new File(buildDir, "classes/java/main")
  }
}

Это устраняет предупреждение, и файл beans.xml находится там, где он должен быть. Проблема, которую я не могу понять, заключается в том, что в сборке есть еще один проект, который зависит от проекта ejb и запускает тесты. При использовании второго подхода он, похоже, не распознает файлы beans.xml (внедрение сварного шва в тестах не работает)

структура проекта:

build.gradle
/ejb-project (builds ejb's and copies beans.xml)
/it-test-project (uses Services from ejb)
/st-test-project
/war-project
/ear-project

It -test-project содержит зависимость project () и этот sourceSets:

dependencies {    
  testCompile project(':ejb-project')
  testRuntime project(':ejb-project')
}

sourceSets {
  test {
    // output.resourcesDir = new File(buildDir, "classes/java/main")
    output.resourcesDir = output.classesDir
  }
}

Я не понимаю, как инъекция в тесте работает в варианте выше, но как только я переключаюсь на комментированный, нет. Я предполагаю, что это связано со ссылками на файлы и зависимостями, но я не понимаю, что будет правильным вариантом здесь.

Любые предложения будут великолепны:)

1 ответ

Решение

Так. После некоторых копаний я мог избавиться от предупреждающего сообщения, выполнив две вещи:

  1. открой мне глаза: тест не пройден из-за отсутствия файла beans.xml, который находится не в java / main, а в тестовых папках. Поэтому приведенная выше строка комментариев не работает, файла beans.xml там нет. Поэтому убедитесь, что вы указали правильные папки, на самом деле мое разрешение.

  2. добавление / изменение resourcesDir в тестовую папку.

Этот фрагмент не приводит к предупреждению:

sourceSets {
    test {
         output.resourcesDir = new File(buildDir, "classes/java/test")
    }
}

Не уверен, что это лучший способ сделать это, поскольку это подразумевает наличие папок с исходными наборами java. Было бы неплохо как-то правильно сослаться на них - но, поскольку я знаю его "java", - хорошо, я могу жить с этим решением.

Другие вопросы по тегам