#android #testing #resources #gradle
#Android #тестирование #Ресурсы #gradle
Вопрос:
У меня есть проект Android gradle и проект java gradle в качестве его зависимости. Во втором есть отдельные классы модульных тестов. Он также содержит ресурсы, размещенные внутри src/main/resources
. Проблема в том, что ресурсы не копируются в каталог тестовой сборки.
Я нашел эту тему: http://forums.gradle.org/gradle/topics/resources_from_src_main_resources_not_included_for_test и добавление фрагмента из позапрошлого сообщения приводит к тому, что ресурсы добавляются, и тесты работают нормально, но сборка android APK завершается неудачей из-за дублирования классов. Можно ли изменить исходные наборы условно (только для теста) или, может быть, есть лучший способ включить ресурсы в тесты?
Это упомянутый фрагмент:
sourceSets {
main {
output.resourcesDir = "build/classes/main"
}
}
Комментарии:
1. «Проблема в том, что ресурсы не копируются в каталог тестовой сборки». Какую именно проблему вы пытаетесь решить здесь? Основные ресурсы помещаются в путь к классу выполнения теста.
2. Проблема в том, что ресурсы не найдены, когда я запускаю тест без указанного фрагмента. Для ясности: есть файл по адресу
/src/main/resources/<package_name>/
.3. О каких ресурсах мы говорим и как именно они загружаются? Это должно работать нормально, за исключением нескольких редких случаев (например, JPA).
4.Это текстовый файл
/src/main/resources/<package_name>/error_index.properties
, который загружается следующим образом:String propertiesFileName = "package_name>/error_index.properties";
ClassLoader cld = ResponseErrorHandler.class.getClassLoader();
InputStream instr = cld.getResourceAsStream(propertiesFileName);
это неправильный способ? Проект изначально был создан как проект java maven с использованием netbeans.5. Отсюда не могу сказать, почему перенастройка
sourceSets.main.output.resourcesDir
будет иметь значение в этом случае. В чистом Java-проекте этого не должно быть. Возможно, попробуйте установитьjar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE
.