У нас есть проект Shared Utilities, два независимых проекта SDK (каждый из которых относится к утилитам) и некоторые проекты плагинов, каждый из которых использует только один из этих SDK. Общие утилиты содержат некоторые все-статические классы, которые нужно сделать видимыми для упомянутых плагинов, но мы хотели бы скрыть остальные его классы от них.Публикация статических методов с помощью прокси-классов
Как мы можем решить проблему? Мы хотели бы, чтобы процесс сборки был максимально простым (мы используем Ant для сборки) с наименьшими возможными зависимостями.
Вот варианты мы рассмотрели до сих пор, и почему мы отбрасывали каждый подход:
- Второй Общие утилиты проекта, которые будут доступны для плагинов - будет сделать сложнее развертывания.
- Создайте 2 отдельных файла .jar из проекта Shared Utils, в котором содержатся только всестатические утилиты, а другой - все, что нужно скрыть. Это сделало бы сборку более сложной, т. Е. Дополнительные зависимости к скриптам сборки плагинов.
- Прокси-все-статические классы в каждом из SDK-дубликатов определений методов, но реализация просто вызывает соответствующий статический метод из проекта Shared - кажется, наиболее безболезненным, недостатком является то, что нам нужно будет скопировать Javadoc вручную. Есть простой тег Javadoc, который будет делать это автоматически после генерации?
- Преобразуйте все-статические классы в "обычные" и просто создайте подклассы в каждом SDK - ненужные (на мой взгляд) служебные издержки.
что вы имеете в виду? – maks
Нам нужно будет создать новый объект почти каждый раз, когда нам нужно использовать один из этих методов - да, создание объекта довольно дешево, потому что объект не будет иметь никаких свойств, но он все еще существует. Кроме того, это сделало бы код «уродливым» и более трудным для чтения. Я уже могу представить, как люди почесывают головы таким кодом. :) –
Если это классы полезности, какие методы вы пытаетесь скрыть? Похоже, вам нужны отдельные проекты «Утилиты» для меня. Импортируйте как в свои проекты SDK, так и только те, у которых более общие методы включены в плагины. – JohnMark13