Я надеюсь, что объясню это как можно точнее, и я хочу знать, правильно ли я настроил зависимости maven или есть ли лучший способ сделать это.
Большинство проектов моей команды разработчиков основаны на доморощенном фляге, которая развернута в загрузчике серверных классов. Причина того, что этот jar находится на этом уровне, заключается в простоте обновления jar в одном месте без повторной упаковки каждого проекта, который его использует, при условии, что внесенные в него изменения обратно совместимы.
Я разрабатываю свои веб-приложения против Jetty в своей локальной разработке. Итак, чтобы веб-приложения работали локально, я настроил зависимости следующим образом: -
<dependencies>
<!-- Configuring external jar dependency -->
<dependency>
<groupId>com.test.app</groupId>
<artifactId>app-jar</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${env.EXTERNAL_JAR}</systemPath>
</dependency>
...
</dependencies>
<build>
<plugins>
<!-- Configuring Jetty -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<contextPath>/${project.parent.artifactId}</contextPath>
<jettyEnvXml>${env.JETTY_ENV_XML}</jettyEnvXml>
<scanIntervalSeconds>1</scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>7777</port>
</connector>
</connectors>
<webAppConfig>
<extraClasspath>${env.EXTERNAL_JAR}</extraClasspath>
</webAppConfig>
</configuration>
</plugin>
...
</plugins>
</build>
В этом подходе я устанавливаю переменную окружения, которая указывает на внешний путь jar, и ссылаюсь на нее в моем файле pom.xml как ${env.EXTERNAL_JAR}
.
После некоторого чтения кажется, что использование "системной" области видимости считается плохой практикой. Итак, я установил этот внешний jar-файл в Nexus и изменил область действия на «предоставлено»: -
<dependency>
<groupId>com.test.app</groupId>
<artifactId>app-jar</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
Это позволяет мне правильно скомпилировать проект, но я не уверен, могу ли я вообще полностью избавиться от переменной окружения "EXTERNAL_JAR", потому что она все еще необходима для правильной работы среды выполнения Jetty. Я предпочитаю использовать «предоставленную» область видимости, это немного утомительно и требует дополнительной работы, потому что теперь мне нужно помнить, чтобы обновить jar в Nexus, когда он был изменен, и мне все еще нужно обновить jar, расположенный по пути, указанному переменной среды.
Есть ли способ для меня, чтобы открыть JAR-файл для внешнего баннера через зависимости maven, но при этом не быть упакованным в проект при создании файла war?
Что вы посоветуете по этому поводу? Должен ли я просто придерживаться «системной» области видимости, чтобы мне просто нужно было обновить банку в одном месте, или я должен использовать «предоставленную» область видимости? Или есть ли лучший способ сделать это?
Большое спасибо.