Импорт определений буфера протокола между проектами Maven

В настоящее время я управляю несколькими отдельными проектами Maven, в которых я использую Protobufs как формат сериализации и по проводу. Я использую David Trott maven-protoc plugin для генерации кода во время компиляции.

Все хорошо и хорошо, пока я не хочу, чтобы этот проект связывался между собой - точнее, использовал друг друга протобуфы. У языка protobuf есть директива "import", которая делает то, что я хочу, но я столкнулся с проблемой того, что проект A экспортирует файл ".proto" (или, возможно, некоторый промежуточный формат?) Для проекта B, который зависит от него.

Maven предоставляет возможность для проекта связывать ресурсы, но AFAIK, они предназначены для использования во время выполнения по коду, а не по цели на этапе формирования компиляции/источника - по крайней мере, я не смог найти документация, описывающая то, что я хочу достичь.

Ответ 1

Я нашел другой способ достижения, и это не связано с магией Maven. Погрузившись в код для плагина maven-protoc, я обнаружил, что это поддерживаемый прецедент - плагин будет искать и собирать файлы .proto в зависимых баночках и распаковывать их во временный каталог. Этот каталог затем устанавливается как путь импорта к вызову protoc.

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

Проекты/а/SRC/главная/ресурсы/a.proto

Теперь в проектах /b/pom.xml добавьте 'a' в качестве обычной зависимости Maven и просто импортируйте a.proto из b.proto, как если бы он существовал локально:

b.proto: импортировать "a.proto";

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

Ответ 2

Вы можете упаковать ваши .proto файлы в отдельный .jar/.zip в проекте, где они сгенерированы, и опубликовать их в вашем репозитории с помощью специального классификатора. Использование плагина сборки может помочь здесь опубликовать что-то близкое к "исходным банкам", которые создаются во время выпусков.

Затем, при использовании проектов, добавьте ранее созданный артефакт в зависимость. Используйте плагин зависимостей с целью "распаковки-зависимостей" и привяжите его к фазе до "компиляции".