многомодульный проект maven с двумя версиями protobuf

#java #maven #language-agnostic #protocol-buffers #dependency-management

Вопрос:

У нас есть многомодульный проект maven. В одном из модулей есть куча .proto файлов, которые мы компилируем в файлы java. Практически каждый другой модуль зависит от этого модуля. Большинство из них используют Protobuf 2.4, но нужно использовать 2.5.

Есть ли какой-нибудь хороший способ сделать это? (Не самый приятный способ-отредактировать файл pom, чтобы сказать «2.5», создать банку, вручную скопировать эту банку туда, где она нам нужна, а затем изменить файл pom обратно на 2.4.)

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

1. Скачайте libprotobuf 3, который поддерживает синтаксис «proto3» и «proto2». Перестройте свой код из исходного кода, и вы объедините все свои прототипы, так что вам не понадобятся никакие ручные трюки, чтобы заставить его скомпилироваться.

2. нет, они оба proto2; я вообще не использую proto3

3. В настоящее время я склоняюсь к тому, чтобы «дублировать» модуль со всеми протонами, но вместо копирования протонов мне придется заново ссылаться на протоны его двойника.

Ответ №1:

Никогда не использовал protobuf, но, как я понимаю, это плагин, который генерирует материал.

Поэтому я дам вам общий указатель, надеясь, что это поможет. Я думаю, вам следует либо попытаться сделать 2 банки с разным классификатором из одного модуля, см. https://maven.apache.org/plugins/maven-jar-plugin/examples/attached-jar.html Например, классификатор proto2.4 и proto2.5, затем вы можете добавить классификатор при определении зависимости для этого модуля.

Другой вариант, который я вижу, состоит в том, что у вас есть 2 модуля, реальный, который у вас есть сейчас, и еще один для 2,5.Сгенерируйте zip из основного, и второй модуль будет пустым, но будет зависеть от сгенерированного zip, распакуйте его и затем скомпилируйте с конфигурацией плагина на 2,5 Медленнее при выполнении, немного грязнее imho, но может потребоваться, если, например, вам нужно больше настроек, чем просто версия.

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

1. Но тогда мне пришлось бы не забывать восстанавливать zip-файл всякий раз, когда что-то меняется… Хмм…

2. ну, это просто запустить maven. используйте плагин сборки для создания zip-файла на нужном этапе

3. Да, я признаю, что это работает… Это немного неловко, но это, безусловно, работает.

Ответ №2:

Наконец-то у меня все получилось более или менее так, как я хотел. Я создал новый модуль ТОЛЬКО с файлом pom; этот файл pom ссылается на протофайлы исходного модуля, но компилирует их с помощью компилятора proto2.5 и помещает результат в свой собственный каталог.