Как сделать манифест доступным во время запуска тестов Maven / Surefire "mvn test"?
У меня есть проект с открытым исходным кодом, который я конвертирую из Ant в Maven, включая его модульные тесты. Вот репозиторий исходного кода проекта Maven:
http://github.com/znerd/logdoc
Мой вопрос относится к основному модулю, называемому «базовым». Этот модуль имеет модульный тест, который проверяет поведение статического метода getVersion()
в классе org.znerd.logdoc.Library
. Этот метод возвращает:
Library.class.getPackage().getImplementationVersion()
Метод getImplementationVersion()
возвращает значение параметра в файле манифеста. Все идет нормально. Я проверял это в прошлом, и он работает хорошо, пока манифест действительно доступен в пути к классам по пути META-INF/MANIFEST.MF
(либо в файловой системе, либо внутри файла JAR).
Теперь моя проблема заключается в том, что файл манифеста недоступен при запуске модульных тестов:
mvn test
Surefire запускает модульные тесты, но мой модульный тест не проходит с сообщением, указывающим, что Library.getVersion()
вернул null
.
Когда я хочу проверить JAR, я обнаруживаю, что он даже не был сгенерирован. Maven / Surefire запускает модульные тесты для классов, за до ресурсы добавляются в путь к классам.
Дальнейшие исследования показывают, что Surefire генерирует свой собственный файл JAR во временном каталоге, например,
/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar
А затем использует этот JAR для загрузки класса Library. Этот JAR-файл не содержит ресурсов, которые я вставил в src/main/resources
. Так что помещение файла META-INF/MANIFEST.MF
тоже не работает.
Итак, как мне сказать Surefire, чтобы мой файл META-INF/MANIFEST.MF
был доступен из того же загрузчика классов, что и класс Library
.
Обратите внимание, что я использую Maven 2.2.0, Java 1.6.0_17 в Mac OS X 10.6.2, с JUnit 4.8.1.