Управление Данными Dependecies Классов Java, что Данные Загрузки из Пути к классу в Runtime

Что самый простой путь состоит в том, чтобы управлять зависимостями классов Java к файлам данных, существующим в пути к классу?

Более конкретно:
Как зависимости по данным должны быть аннотированы? Возможно, с помощью аннотаций Java (например, @Data)? Или скорее некоторые записи сборки в сценарии сборки или файле свойств? Есть ли инструмент сборки, который интегрирует и оценивает такую информацию (Муравей, Scons...)? У Вас есть примеры?

Рассмотрите следующий сценарий:
Несколько строк Муравья создают Банку из моих источников, которая включает все найденное в путь к классу. Затем jarjar используется для удаления всех .class файлов, которые не необходимы для выполнения, скажем, класса Foo. Проблема состоит в том, что все файлы данных, от которых зависит класс Панель, находятся все еще там в Банке. Идеальный сценарий развертывания, однако, распознал бы, что файлы данных, от которых только зависит класс Панель, могут быть удалены, в то время как файлы данных, от которого класса зависит Foo, должны быть сохранены.

Какие-либо подсказки?

9
задан Brian Tompsett - 汤莱恩 8 December 2015 в 16:18
поделиться

3 ответа

Я не думаю, что существует общее решение для описанной вами системы, однако я только что попробовал прочитать аннотации к классам с помощью ASM, поскольку он также используется в jarjar. Считать данные аннотации таким способом несложно (передайте ClassVisitor в метод accept() на ClassReader и сделайте что-нибудь полезное на обратном вызове visitAnnotation). Это означает, что вы можете либо попытаться включить предполагаемое поведение в jarjar, либо добавить его в качестве пользовательского шага в процесс сборки.

0
ответ дан 5 December 2019 в 02:27
поделиться

Не могли бы вы провести рефакторинг своего проекта так, чтобы у вас были подмодули, каждый из которых содержал соответствующие файлы для самого проекта; Классы Bar и файлы, связанные с Bar, будут упакованы в свои пакеты, а файлы Foo будут упакованы в другой?

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

0
ответ дан 5 December 2019 в 02:27
поделиться

Это одна из многих проблем, которые Maven уже решил с помощью своей сборки, зависимостей и ресурсов. управление. Любой проект maven следует стандартной структуре каталогов, которая определяет, где вы должны разместить файлы данных: в каталогах ресурсов. Стандартная структура каталогов Maven выглядит следующим образом ...

/
/src/
/src/main/java/
/src/main/java/App.java
/src/main/resources/
/src/main/resources/my.prod.data.or.cfg.or.whatever
/src/test/java/
/src/test/java/AppTest.java
/src/test/resources/
/src/test/resources/my.test.data.or.cfg.or.whatever
/pom.xml

Преимущество этого заключается в том, что все файлы, содержащиеся в каталогах «основных» (prod) ресурсов, доступны вашему приложению во время выполнения из пути к классам. Все файлы «test / resources» доступны для вашего кода во время сборки и модульного тестирования, но НЕ включены в ваш окончательный артефакт.

1
ответ дан 5 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: