Я хотел бы построить две разные версии пользовательского плагина SonarQube (SQ); один для выпуска SonarQube 6.7.x LTS, один для последней версии 7.6. На данный момент у меня есть структура Maven, похожая на следующую:
- родитель
- common: общий код, используемый как инструментом, так и обеими версиями плагинов, не использует SQ API
- : некоторые связанные утилиты командной строки, не использующие SQ API
- plugin-6.7: код плагина для SQ 6.7
- plugin-7.6: код плагина для SQ 7.6
- dist: Создает zip-дистрибутив, содержащий утилиту CLI, версии плагинов, лицензии на зависимости и исходный код
Большая часть исходного кода и ресурсов одинаковы для обоих плагинов-6.7 и 7.6; только небольшое количество классов отличается. Как таковой, я хотел бы переместить этот общий код в какую-то общую исходную папку / модуль
Я все же хотел бы скомпилировать этот общий код дважды, чтобы проверить, компилируется ли код для обеих версий SQ API. В Eclipse это должно отображаться в виде двух отдельных исходных папок или проектов, поэтому я могу легко проверить, что общий код не использует API SQ, которые еще не доступны в API 6.7, и не использует API, которые были удалены или устарел в 7.6 API.
Предпочтительно, я бы хотел придерживаться сборки обеих версий плагинов в одной сборке, поэтому, если возможно, я бы хотел избежать использования двух отдельных профилей.
Возможно ли это как-нибудь?
Что я пробовал
С Maven я нашел несколько способов заставить это работать, но я не могу заставить ни один из этих подходов работать с m2eclipse.
Подход 1
Создайте новый общий модуль plugin, содержащий pom-6.7.xml и pom-7.6.xml. Оба pom по сути одинаковы, кроме идентификатора артефакта или классификатора, и зависимости от разных версий SQ API. Родительский проект определяет их как 2 отдельных модуля, используя
<module>plugin-common/pom-6.7.xml</module>
<module>plugin-common/pom-7.6.xml</module>
Проблема этого подхода заключается в том, что я не могу импортировать эти модули в Eclipse, так как m2eclipse поддерживает только pom.xml в качестве имени файла.
Подход 2
Аналогично вышеописанному, но с использованием отдельных подкаталогов для файлов pom.xml и использованием <sourceDirectory>${project.basedir}/../src/main/java</sourceDirectory>
для указания на общий исходный код:
- плагин-общий
- SRC / основные / ресурсы
- pom.xml: родительский модуль для модулей 6,7 и 7,6
- 6,7 / pom.xml
- 7,6 / pom.xml
Этот подход позволяет импортировать обе общие версии плагинов в Eclipse, но Eclipse жалуется на «Access ... / src / main / java каталог вне базового каталога проекта». Как таковой, он не показывает никакого исходного кода в двух общих проектах плагинов.
Подход 3
Не добавляйте файлы pom.xml в plugin-common, но вместо этого добавьте общий код в качестве исходных папок в модули plugin-6.7 и plugin-7.6, используя build-helper-maven-plugin, используя <source>${project.basedir}/../plugin-common/src/main/java</source>
.
Снова это происходит в Eclipse из-за предупреждения «Access ... / src / main / java каталог вне базового каталога проекта».