Я пытаюсь получить во время выполнения ссылку на скомпилированный подотчет, который находится в том же каталоге, что и мой основной отчет.После нескольких часов поиска я попытался получить ссылку на файл в виде URL-адреса, используя следующее:
new String(
ClassLoader.getCallerClassLoader().toString().substring(
ClassLoader.getCallerClassLoader().toString().indexOf("=") + 1,
ClassLoader.getCallerClassLoader().toString().lastIndexOf("/") ).toString() ) +
"/some.jar/com/foo/reports/ThatDamnedReport/ThatDamnedReport_subreport1.jasper"
Когда я отлаживаю, я могу изменить значение моей строки с помощью приведенного выше оператора, и это работает!Yay!
Задача 1
Мы используем предварительно скомпилированные файлы jasper, и я могу скомпилировать только до версии 3.1.4 (в противном случае остальная часть древнего кода ломается).«Стандартный» способ доступа к моему подотчету не работает, потому что я не могу найти относительный каталог к своему подотчету.Мы не используем JasperServer.
Проблема 2
Когда я компилирую через iReport, я получаю сообщение об ошибке "метод getCallerClassLoader из типа ClassLoader не виден"
Поскольку я пытаюсь скомпилировать из файла JRXML, подклассы здесь не вариант.
Вопрос
Как мне получить файл для компиляции или как найти относительный путь к ThatDamnedReport_subreport1.jasper