У меня был код, который работал правильно, когда выполнялся во время стандартного модульного тестирования, но не работал, когда он был скомпилирован в jar и был добавлен как зависимость для какого-то другого проекта.
Не было проблемы найти основную причину и исправить ее, но я начал думать, как я могу протестировать свежеприготовленный артефакт jar перед его развертыванием в любом месте, чтобы убедиться, что он будет работать для конечных пользователей и других проектов. Я гуглил эту тему в течение нескольких часов, но даже не нашел ничего похожего на нее.
Может быть, я абсолютно неправ и пытаюсь достичь чего-то странного, но я не могу придумать другого способа, как проверить скомпилированные пакеты и быть уверенным, что это будет работать для других.
Некоторые подробности о проекте - простая библиотека Java с несколькими классами, использующая Gradle 5.5 в качестве системы сборки и travis-ci в качестве инструмента CI / CD, для тестирования я использую TestNG, но я могу легко переключиться на JUnit, если он потребуется.
Если вам интересно, какой код не работал, когда он был скомпилирован в пакет, вот упрощенная версия:
public String readResourceByURI() throws IOException, URISyntaxException
{
new String(Files.readAllBytes(Paths.get(ClassLoader.getSystemClassLoader().getResource("resource.txt").toURI())));
}
Эта функция генерирует исключение java.nio.file.FileSystemNotFoundException, если оно упаковано в файл jar. Но, как я уже сказал, проблема не в коде ...
В идеале я хочу создать конвейер сборки, который будет генерировать артефакты jar, которые затем будут проверены, и если тесты пройдут успешно, эти jar будут автоматически развернуты в хранилище (maven и / или bintray).
В настоящий момент все тесты выполняются до создания jar, и в результате есть вероятность, что скомпилированный код внутри пакета jar не будет работать из-за упаковки.
Итак, чтобы упростить мой вопрос, я ищу конфигурацию Gradle, которая может выполнять модульные тесты для только что созданного jar-файла.