Плагин Maven Flatten не работает, не заменяет свойство моей версии

По какой-то причине, когда я устанавливаю mvn и проверяю свое локальное репо и смотрю на pom там, я не вижу, чтобы переменная версии была заменена значением.

Я использую родительский pom с версией в свойствах

<properties>
    <maven.javadoc.skip>true</maven.javadoc.skip>
    <revision>19.3.29</revision>
</properties>

Он также содержит запись плагина flatten:

          <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.2</version> 
                <configuration>
                    <updatePomFile>true</updatePomFile>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

дочерний pom использует $ {revision} как значение для версии и $ {project.version} для зависимостей как рекомендовано maven:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>analysisModule</artifactId>
    <version>${revision}</version>
    <parent>
        <groupId>com.mycompany.analysis</groupId>
        <version>1.0.0</version>
        <artifactId>autoav</artifactId>
        <relativePath>../autoAV</relativePath>
    </parent>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <dependencies>
      <dependency>
        <groupId>com.mycompany.analysis</groupId>
        <artifactId>analysisCore</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
</project>

Глядя на локальный репозиторий pom xml после того, как я установил mvn:

<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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <artifactId>analysisJdbc</artifactId>
        <version>${revision}</version>
        <description>analysis of jdbc sources</description>
        <parent>
                <groupId>com.mycompany.analysis</groupId>
                <version>1.0.0</version>
                <artifactId>autoav</artifactId>
                <relativePath>../autoAV</relativePath>
        </parent>
        <build>
                <resources>
                        <resource>
                                <directory>src/main/resources</directory>
                                <filtering>true</filtering>
                        </resource>
                </resources>
        </build>
        <dependencies>
                <dependency>
                        <groupId>com.mycompany.analysis</groupId>
                        <artifactId>analysisCore</artifactId>
                        <version>${project.version}</version>
                </dependency>
...
</project>

Разве $ {revision} и $ {project.version} не должны быть заменены фактическими числами? Разве это не все об использовании плагина flatten?

Я следил за этим https://www.mojohaus.org/flatten-maven-plugin/examples/example-central-version.html

Добавление моего вывода mvn install (пропуск тестов) (версия maven 3.3.9):

02:12:03 :/code/thedrs/gitrepos/analysis/analysis/analysisJdbc  (main) $ mvn install  -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building analysisJdbc 19.3.30
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ analysisJdbc ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ analysisJdbc ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ analysisJdbc ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ analysisJdbc ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ analysisJdbc ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ analysisJdbc ---
[INFO] Building jar: /code/thedrs/gitrepos/analysis/analysis/analysisJdbc/target/analysisJdbc-19.3.30.jar
[INFO] META-INF/maven/com.mycompany.analysis/analysisJdbc/pom.xml already added, skipping
[INFO] META-INF/maven/com.mycompany.analysis/analysisJdbc/pom.properties already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ analysisJdbc ---
[INFO] Installing /code/thedrs/gitrepos/analysis/analysis/analysisJdbc/target/analysisJdbc-19.3.30.jar to /code/thedrs/.m2/com/mycompany/analysis/analysisJdbc/19.3.30/analysisJdbc-19.3.30.jar
[INFO] Installing /code/thedrs/gitrepos/analysis/analysis/analysisJdbc/pom.xml to /code/thedrs/.m2/com/mycompany/analysis/analysisJdbc/19.3.30/analysisJdbc-19.3.30.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.147 s
[INFO] Finished at: 2020-05-06T02:12:40-07:00
[INFO] Final Memory: 14M/356M
[INFO] ------------------------------------------------------------------------

person thedrs    schedule 05.05.2020    source источник
comment
Показано, что плагин flatten-maven-plugin выполняется во время сборки? Вы можете добавить файл журнала? Какую версию Maven вы используете?   -  person khmarbaise    schedule 05.05.2020
comment
Ваш родительский POM содержит определение плагина в <plugins> или в <pluginManagement>?   -  person J Fabian Meier    schedule 05.05.2020
comment
@khmarbaise - flatten не отображается для выполнения. Я использую maven 3.3.9. добавление журнала установки mvn выше к моему вопросу.   -  person thedrs    schedule 06.05.2020
comment
@JFMeier - да, он содержит: ‹build› ‹pluginManagement› ‹plugins› и там плагин, показанный выше   -  person thedrs    schedule 06.05.2020
comment
Есть две вещи. Если вам нравится использовать ci friendly (${revision}), вы должны использовать как минимум Maven 3.6.3, а также переместить плагин flatten в правильное место, как уже предлагал JFMeier ... также я настоятельно рекомендую обновить все версии ваших плагинов, которые вы используете потому что вы используете очень старые плагины ...   -  person khmarbaise    schedule 06.05.2020
comment
@khmarbaise - спасибо за быстрый ответ. Я заменил maven на последнюю версию 3.6.3, но он по-прежнему не запускает плагин flatten, когда я запускаю mvn install. Я попытался запустить mvn flatten: flatten, и он выполняет и создает .flattened-pom.xml. Я не понимаю, почему он не связан с фазами, которые запускаются установкой и не копируются в локальное репо. Разве он не должен этого делать? мне нужно запускать flatten: flatten каждый раз и вручную копировать в репо? Также, как вы видите из моего ответа выше, плагин находится в разделе build / pluginManagement / plugins в родительском файле. Это не так?   -  person thedrs    schedule 06.05.2020


Ответы (2)


Вам необходимо переместить плагин с <pluginManagement><plugins> на <plugins>. В качестве альтернативы вы можете оставить его там и просто добавить короткое определение плагина (включая groupId и artifactId) в раздел <plugins>.

<pluginManagement> предназначен только для предварительной настройки номеров версий и конфигурации. Плагины в <pluginManagement> не запускаются во время сборки, если они снова не появятся в <plugins>.

person J Fabian Meier    schedule 06.05.2020
comment
Спасибо за это разъяснение. Теперь он заменяет переменную версии в распределенных помпах. Я заметил, что зависимости $ {project.version} не заменяются. Я предполагаю, что flatten не предназначен для этого или, возможно, он не нуждается в замене, поскольку maven знает, как заменить его из версии артефакта. - person thedrs; 07.05.2020
comment
Я не совсем уверен, но думаю, что ${project.version} не нужно заменять. - person J Fabian Meier; 07.05.2020

Я смог добиться этого, создав еще одно свойство для зависимостей. Это свойство будет иметь то же значение, что и ${revision}, и будет заменено в сгенерированном файле pom.

<properties>
    <revision>19.3.29</revision>
    <my-lib.version>${revision}</my-lib.version>
</properties>

Затем вместо использования ${project.version} в ваших зависимостях используйте свое свойство:

<dependency>
    <groupId>com.mycompany.analysis</groupId>
    <artifactId>analysisCore</artifactId>
    <version>${my-lib.version}</version>
</dependency>
person Peterson Machado    schedule 23.04.2021