#java #maven #dependencies #artifactory
#java #maven #зависимости #артефактор
Вопрос:
Я буду быстрым. Моя версия maven — 3.5.0. Я использую некоторые библиотеки в своих веб-приложениях. Библиотеки устанавливаются отдельно и развертываются в экземпляре artifactory.
У меня есть следующий pom (часть):
<project>
....
<properties>
<process.domain.common.version>0.0.1-SNAPSHOT</process.domain.common.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
<version>${process.domain.common.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
</dependency>
</dependencies>
</project>
но в библиотеках Maven помещает эту библиотеку:
process.domain.common-0.0.1-20190319.151024-3.jar
вместо этого:
process.domain.common-0.0.1-SNAPSHOT.jar
Мои зависимости разрешаются из artifactory. Почему Maven помещает эту временную библиотеку с именем метки времени вместо СНИМКА? Такое поведение происходит не во всех разрешенных библиотеках.
Комментарии:
1. возможно ли, что у вас есть версия «0.0.1-20190319.151024-3 » каким-то образом жестко задано как временная зависимость. На мой взгляд, это было бы единственной причиной, по которой Maven загрузил бы его вместо указанного. Вы полностью очистили свою локальную среду перед сборкой (удалили все ранее загруженные библиотеки)?
Ответ №1:
Наконец, я нашел решение.
Решение состоит в том, чтобы добавить плагин maven war в ваш pom.xml проекта war:
<properties>
<version.war.plugin>2.5</version.war.plugin>
</properties>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${version.war.plugin}</version>
<configuration>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
Доказательство:
Комментарии:
1. Повлияла ли версия 2.5 на разницу? Или вы просто добавили фрагмент <плагин>, чтобы решить свою проблему?
2. просто добавлен плагин
Ответ №2:
Maven добавляет текущую дату к моментальным снимкам, чтобы сравнить версию моментального снимка из вашего локального репозитория и версию моментального снимка из удаленного репозитория и оценить, требуется ли загрузка remoting jar, потому что загрузка 0.0.1-SNAPSHOT сегодня может дать другой файл, чем загрузка его вчера или завтра.
Комментарии:
1. У вас есть официальная ссылка, которая поддерживает это? Я работал с Maven и никогда не замечал этого. Более того, следуя вашей логике и тому факту, что добавленная временная метка доходит до секунд, если я выполняю сборку каждую минуту, то каждую минуту должна загружаться новая версия, неважно, изменилась она или нет. Это просто не кажется правильным….
2. Понятно. Но вопрос в том, почему maven объявляет войну этой неофициальной версии файла вместо обычной.
3. @Theodore похоже, что вы запускаете mvn с заблокированными моментальными снимками попробуйте запустить версии mvn: разблокировать-snapshots, чтобы использовать моментальный снимок вместо версии с привязкой ко времени
Ответ №3:
Если вы создаете моментальный снимок локально, это просто сборка с именем 0.0.1-SNAPSHOT
. Если вы развернете его в Artifactory, он получит номер версии внутренней временной метки, подобный тому, который вы упомянули.
Когда вы загружаете его снова, Artifactory предоставляет вам последнюю временную метку.
Таким образом, локально у вас иногда есть -SNAPSHOT
версия, а иногда и версия с меткой времени. Точное правило, как называется артефакт в war, мне неясно, но независимо от того, есть ли у вас версия с отметкой времени или нет, все должно быть в порядке.