#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 и помещает результат в свой собственный каталог.