2013-06-07 4 views
2

Нужна помощь с проблемой. В одном из моих классов Java мне нужно получить доступ к файлу. Файл должен находиться в том же месте (в исходном коде), что и рассматриваемый класс java. Вот выдержка из кода.Cant файл для чтения в исходном коде

String fileName = "myfile.myext"  
resource = "./" + fileName 
String fileContent = IOUtils.toString(clazz.getResourceAsStream(resource)); 

И это хорошо работает в моей коробке разработчиков в Eclipse. Однако, как только я положил его на Jenkins (это мой CI-сервер), он не работает. Я проверил следующее

  1. Файл «myfile.myext» существует в банке, который был развернут на Дженкинс.
  2. Код Дженкинса не только не найден «myfile.myext», но он не находит «someOther.class», если я попытаюсь прочитать содержимое 8 класса таким образом. Здесь «someOther.class» является фактическим классом, который является частью кода.

Несколько вещей, которые могут иметь отношение

  1. Материал, который развертывается в Дженкинс является «myProduct.jar» и «myProduct_test.jar». Мои юниты находятся только в «myProduct_test.jar», а не в «myProduct.jar». Напротив, весь мой код продукта находится только в «myProduct.jar», а «myProduct_test.jar» просто использует эту банку из classpath.

Net net, in Jenkins Я не могу получить тестовые файлы, чтобы прочитать файл с базы кода. В Eclipse я могу.

Кто-нибудь сталкивался/решал это раньше?

ответ

1

Проблема заключается в том, что при запуске вашей программы в Eclipse код запускается из каталога, содержащего код, тогда как Jenkins запускает его из другого каталога. Таким образом, ./ не относится к каталогу, содержащему код.

Вы можете использовать метод getResourceAsStream, чтобы загружать ресурсы из местоположений в вашем пути к классам и, по-видимому, имеет дело с комплектом JAR. Этот article on resource loading должен что-то объяснить.

Однако этот метод действительно должен использоваться только для файлов, с которыми пользователь никогда не должен взаимодействовать. Например, если вы хотите сохранить отредактированный пользователем файл конфигурации, его следует поместить в другое место, например, Application Data directory.

Смежные вопросы