Это больше, чем простой вопрос в теме. Я просмотрел предлагаемые ссылки на «похожие вопросы», и ни один из них не помог полностью.
ПРЕДПОСЫЛКИ: Создание системы плагинов для приложения. Частично это потребует от других команд создания самих плагинов. Структура каждого построенного плагина имеет проект реактора с двумя модулями, один из которых объединяется с другим с помощью плагина Shade. В результате создается один файл JAR, который создается в целевой папке одного из модулей. Это все прекрасно работает. Поскольку у нас есть некоторые вещи, которые потребуются всем плагинам (настройки, структура, зависимости), мы создали еще один проект project-plugin-parent
, в котором есть только POM, содержащий все общие ссылки и зависимости. Каждый плагин должен ссылаться на этот родительский POM для всех общих элементов, так что разработчикам не нужно беспокоиться об этом. Одним из параметров, передаваемых в утилиту, является файл jar.
В рамках этого POM у нас есть некоторые утилиты, которые мы помечаем как зависимости, которые затем копируются в локальный utils
папки. После загрузки этой утилиты мы запускаем ее (в зависимости от используемого профиля) ... Чтобы запустить ее, ее необходимо обнаружить. Когда я помещаю зависимости и команды копирования в POM плагина (первый модуль), он прекрасно работает. Но мы хотим, чтобы он действительно находился в project-plugin-parent
POM ... Это помещает папку utils в папку реактора ... Хорошо, я могу работать с этим. Проблема возникает, когда она затем пытается запустить утилиту ... потому что она находится в родительском POM, она пытается запустить ее оттуда и поэтому неправильно передает неверный файл JAR в параметрах.
ОК, вот как выглядит структура
project-plugin-parent.pom
plugin-project-reactor (with dependency on project-plugin-parent.pom
|
|-- plugin-project-main
|
\-- plugin-second
Я бы предпочел, чтобы утилита оказалась внутри plugin-project-main ... но если она окажется в Структура реактора это нормально. Каким-то образом мне нужно иметь возможность попасть в папку / jar plugin-project-main
. В то же время я не могу просто жестко закодировать имя папки, так как оно будет варьироваться от проекта к проекту.
В proect-plugin-parent приведен узел конфигурации для команды maven copy.
<configuration>
<artifactItems>
<artifactItem>
<groupId>gov.va.bip.docgen</groupId>
<artifactId>my-project-svc-rest</artifactId>
<version>1.0.0</version>
<type>jar</type>
<destFileName>my-service.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/../utils</outputDirectory>
</configuration>
Это успешно загрузит файл из nexus и скопирует его в папку utils внутри уровня реактора. Опять же, я бы предпочел, чтобы он попал в основную папку плагинов.
Вот exe c этого загруженного jar:
<configuration>
<executable>java</executable>
<arguments>
<argument>-Dloader.path=${project.build.directory}/${project.build.finalName}/${artifactId}.jar</argument>
<argument>-Dserver.port=10080</argument>
<argument>-jar</argument>
<argument>${project.build.directory}/../utils/my-service.jar</argument>
</arguments>
<includeProjectDependencies>false</includeProjectDependencies>
</configuration>
Вы можете видеть, что мы проходим путь к jar плагина, который находится в plugin-project-main / target ... В приведенной выше конфигурации вместо этого я получаю ссылку на банку реактора (которая не существует).
Так есть ли способ динамически получить эту папку главного модуля в реакторе? ? Если я могу получить это, то я могу либо поместить утилиты в папку модуля (предпочтительно), либо, по крайней мере, передать правильный путь к утилите, когда она будет выполнена.