Я пытаюсь потребовать, чтобы определенное свойство было определено во время сборки с использованием подключаемого модуля mavenнужденного управления и правила RequireProperty
.
Соответствующая часть моего pom.xml
такова.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<foo>bar</foo>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M1</version>
<executions>
<execution>
<id>require-properties</id>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<requireProperty>
<property>${foo}</property>
<message>foo must be defined -${foo}-</message>
</requireProperty>
</rules>
<!-- Disabling, since it seems to not notice properties that are defined -->
<!-- <skip>true</skip> -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Когда я запускаю это, правило принудительного применения не выполняется.
$ mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------------< test:test >------------------------------
[INFO] Building test 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M1:enforce (require-properties) @ test ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
foo must be defined -bar-
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.398 s
[INFO] Finished at: 2019-03-15T11:45:58-04:00
[INFO] ------------------------------------------------------------------------
Оно также не срабатывает, если я определяю его в командной строке.
$ mvn install -Dfoo=quz
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------------< test:test >------------------------------
[INFO] Building test 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M1:enforce (require-properties) @ test ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
foo must be defined -quz-
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
Разве это правило не для <properties>
значений?Из сообщения ясно, что значение фактически установлено.
Я также попытался добавить <regex>.*</regex>
безрезультатно.
Как проверить, установлено ли свойство maven?
Реальные данные дела
В этом примере свойство определено в pom, поэтому оно как бы избыточно для включения проверки.В реальном случае плагин определяется в родительском pom, а свойство определяется в листовом pom.Поведение в реальном случае такое же.
mvn -version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T14: 41: 47-04: 00) Maven home: /usr/local/Cellar/maven/3.6.0/libexec Версия Java: 10.0.1, поставщик: Oracle Corporation, среда выполнения: /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/ Home Язык по умолчанию: en_US, кодировка платформы: UTF-8 Имя ОС: "mac os x", версия: "10.14.3", arch: "x86_64", семейство: "mac"