maven - разделить некоторые ресурсы в банку с другим классификатором - PullRequest
1 голос
/ 04 октября 2011

У меня есть проект, который включает в себя некоторые API Java, некоторые файлы ресурсов и некоторые предварительно созданные модели машинного обучения, которые могут использоваться API Java.Модели в настоящее время находятся в src/main/resources, и классы загружают их через Class.getResource.Модели используются в нескольких модульных тестах, которые обеспечивают правильную работу API-интерфейсов.

Все это в основном нормально, за исключением того, что модели довольно большие, и некоторым пользователям API-интерфейсов модели могут вообще не понадобиться,(Им просто потребуются классы Java и другие файлы ресурсов меньшего размера.) Поэтому я хотел бы организовать распределение, в котором пользователи могли бы выбирать, включать файлы модели или нет.

Сначала я подумал, что, возможно,модели должны быть отдельным проектом Maven, но если я их вытащу, я не уверен, как будут работать зависимости.Проект моделей должен был бы зависеть от основного проекта для API Java, но основной проект должен был бы зависеть от проекта моделей для его тестов.Так что это кажется круглым.

Тогда я подумал, что, возможно, мне следует попытаться создать отдельную банку с классификатором, чтобы, например, пользователи, которым нужны только API, писали:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.5.0</version>
</dependency>

и пользователи, которым нужны были и API, и модели, написали бы:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.5.0</version>
</dependency>
<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.5.0</version>
    <classifier>models</classifier>
</dependency>

Но я не уверен, как настроить все так, чтобы при запуске mvn package некоторые ресурсы выделялись в банку сдругой классификатор.Как я могу это сделать?

(В идеале, все это могло бы произойти только с базовым mvn package и не требовало бы возиться с, скажем, разными профилями, поскольку я бы всегда был быупаковка вещей таким же образом.)

1 Ответ

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

Учитывая эти очки ...

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

Я считаю, что проблема в том, что вы используете поставляемые модели для модульного тестирования.

Я рекомендую вам сделать следующее:

  • Создайте отдельный модуль maven для моделей, как вы изначально и хотели. Они будут в src/main/resources нового модуля. Ваш модуль API больше не будет иметь моделей в src/main/resources.
  • В модуле API создайте несколько более простых моделей, предназначенных исключительно для модульного тестирования, и поместите их в src/test/resources. Сделайте их максимально минималистичными, чтобы протестировать функциональность API. Перепишите свои тесты API, чтобы использовать их вместо этого. В качестве отправной точки вы можете сделать копию поставляемых моделей и разместить их здесь, но я рекомендую меньший набор тестовых данных, содержащий примеры каждого вида вещей, которые может содержать модель.
  • Если вы хотите проверить, правильно ли вы создали предварительно созданные модели, зависит ли модуль новой модели от модуля API, и пишите модульные тесты для предварительно созданных моделей в модуле модели.

Это оставляет вас без модульных циклов, отдельных моделей от API, модульных тестов для API и опциональных модульных тестов для поставляемых моделей.

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