Я использую maven 3.0.4 и хочу сделать временную метку сборки доступной для моего приложения. Для этого я помещаю заполнитель в .properties
файл и позволяю maven фильтровать сборку. Хотя это нормально работает ${project.version}
, ${maven.build.timestamp}
не заменяется на фильтрацию.
Похоже, свойство доступно при сборке - я могу использовать его для изменения имени артефакта:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Так почему же он недоступен для фильтрации ресурсов? И, что более важно, как сделать его доступным?
target/${project}
папке в порядке , но в моей конфигурации Actall Tomcat не использует эту папку ...maven.build.timestamp.format
несколько раз?${timestamp}
буквальной строкой${maven.build.timestamp}
.buildTimestamp=@timestamp@
Я могу подтвердить, что Maven 3.x
{maven.build.timestamp}
сейчас "работает". Видимо, они работают над решением проблемы. Больше неproperties
требуется никакого дополнительного обходного пути.Однако будьте осторожны, ваш плагин «фильтрации» (maven-resources-plugin) обновлен. Он должен быть относительно новым, поэтому, если
mvn help:effective-pom
отображается старая версия (например, 2.6), переместите ее на что-то более новое, исправьте для меня, 3.x например:<properties><timestamp>...
обходной путь больше не требуется ...Это также прояснило, почему он работал в IntelliJ, но не в командной строке. IntelliJ, вероятно, использует свои собственные "модифицированные / внутренние" константы maven, поэтому он работал там, но не из командной строки maven.
Также обратите внимание, что если вы добавляете каталог ресурсов фильтрации к своему pom, вам может потребоваться также «повторно добавить» каталог по умолчанию, он теряется, например:
NB, если вы используете весеннюю загрузку в качестве родительского, вы должны использовать вместо этого @ maven.build.timestamp @ . Также обратите внимание, что если вы используете весеннюю загрузку, есть файл,
META-INF/build-info.properties
который необязательно создается с помощью,spring-boot-maven-plugin
который вы можете читать (Spring предоставляетBuildProperties
компонент для удобства чтения).источник
<webResources><resource><filtering>
) :-( см. MWAR-415 -> так что все равно придется использовать обходной путь<properties><timestamp>...
обходной путь. См. Также issues.apache.org/jira/browse/MASSEMBLY-603Чтобы обогатить контент Stackoverflow для других, таких как я, нашел этот пост как способ решить "проблему"
${maven.build.timestamp}
. Это не ошибка maven, а ожидаемое поведение m2e, как видно из этого поста .Поэтому я считаю, что нельзя ожидать «исправления» решения, поскольку, насколько я понимаю, исправление связано с концептуальными проблемами.
В моем случае я использовал плагин (
buildnumber-maven-plugin
), как описано в этом посте .источник
buildnumber-maven-plugin
аналогичные проблемы, а именно, что генерируемая переменная доступна только в определенных контекстах, а НЕ при фильтрации. Вы можете или не сможете преодолеть это, возясь с этапом выполнения или целями, но встроенное решение кажется намного проще.Добавление свойств Maven на уровне проекта pom не учитывает правильный локальный часовой пояс, поэтому временная метка может отображаться неправильно:
Использование build-helper-maven-plugin применяет правильный часовой пояс и текущее летнее время к метке времени:
При упаковке Maven заменит любую временную метку токена в папке / resources, например resources / version.properties:
build.timestamp = $ {отметка времени}
Затем вы можете загрузить этот файл свойств в свое приложение.
источник