Создание невидимого класса в банке - PullRequest
3 голосов
/ 23 октября 2011

Как мне создать jar-файл в java, чтобы пользователи jar могли видеть только один класс (общедоступный)?

Я знаю, что могу опустить "public" в объявлении класса, что делает его видимым только для этого пакета, но как мне сделать это в банке с несколькими пакетами, когда видимость должна быть публичной для всех занятия внутри банки, но не снаружи банки?

Ответы [ 4 ]

3 голосов
/ 23 октября 2011

Вы в основном ищете Java-аналог для всей сборки .Net. Боюсь, у вас нет этой способности в рамках текущей Java. Будущая версия Java предложит лучшую поддержку модулей, что должно позволить что-то в этом роде.

1 голос
/ 23 октября 2011

Вы должны будете включить все свои классы в один пакет Java и опустить модификатор public в определении класса.

Я рекомендую против этого. Если вы хотите указать, что класс не должен использоваться клиентами библиотеки, поместите его в пакет с именем «impl» или «internal» и не предоставляйте общедоступную документацию.

0 голосов
/ 23 октября 2011

Просто дикая идея, но вы можете поиграть с пользовательским загрузчиком классов, который загружает файлы из вашего .jar, которые иначе не распознаются как классы.

Например, вы можете постобработать файлы классов, зашифровав их исохранение с вашим собственным расширением файла, затем загрузка и дешифрование их из фляги вашим пользовательским загрузчиком классов из «основного» класса, который виден пользователям класса.(предостережение; я никогда не пытался сделать что-то подобное сам: -))

Другой метод (если база кода не слишком велика) может состоять в том, чтобы разрабатывать ваши классы как обычно, запускать свои тесты наСтруктура пакета и в качестве последнего шага перед упаковкой используйте скрипт (perl) для перестройки вашего основного класса, вставив все остальные классы в качестве закрытых статических внутренних классов и перестройте их.Использование этого преобразования в качестве шага перед пакетом означает, что вы можете развиваться в разумной структуре, скрывая классы реализации в jar.

0 голосов
/ 23 октября 2011

Исправлено ли использование protected в качестве модификатора?Я знаю, что он разрешает доступ для унаследованных классов, но я не знаю обо всех других классах в пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...