вторник, 31 июля 2012 г.

Если нельзя, но хочется

Буквально одновременно с моим коллегой мы наткнулись на проблему с использованием классов из JDK, расположенных на четвёртом уровне вложенности пакетов. В частности, мой тест для класса com.sun.beans.TypeResolver работает уже давно, а с новым тестом для com.sun.beans.finder.ClassFinder началась мистика.

С локальной сборкой тест работал как ожидалось, поэтому был отправлен в пространство на сервер. Через некоторое время на меня выставили баг, что тест не работает, так как класс ClassFinder не найден. Я скачал последние сырцы, скомпилировал и у меня заработало. В результате долгой с тестерами выяснилось, что тест не работает только с построенным для публикации bundle.

Оказалось, что при компиляции Java использует символьный файл lib\ct.sym, который создаётся автоматически. Как его обновлять никто не знает. В моём случае это не актуально, но неожиднно для публичных классов, которые использовал мой коллега.

Зачем этот класс тоже никто не знает, но он есть и портит всем жизнь. Если бы он был нужен для обеспечения security, то это было бы понятно, но можно просто обойти это ограничение, использовав следующий ключ для компиляции:

java -XDignore.symbol.file ClassName.java

PS. Век живи - век учись. Вроде уже столько лет разрабатываю саму Java и, всё-равно, нашёл что-то новенькое, про что большинство и не знает.

Комментариев нет:

Отправить комментарий