Я не знаю, делали ли вы когда-нибудь проект maven, который нужно опубликовать на удаленном складе, или он состоит из нескольких модулей.Каждый модуль может существовать независимо и имеет свой номер версии. Как и в Spring Boot, хотя такие модули, как jdbc/web/redis, представляют собой несколько модулей в рамках одного проекта, после выпуска они становятся независимыми артефактами. Если номер версии жестко закодирован, он не подходит для обслуживания, а ссылочный номер версии будет иметь проблемы, такие как наследование. Итак, вопрос в том, как поддерживать глобальный номер версии?
При использовании проекта многомодульной структуры Maven настройка номера версии является головной болью. Унаследованная версия, зависимая версия и собственная версия должны определяться отдельно, что очень проблематично. Но на самом деле Maven уже предоставил этот метод управления версиями CI, и конкретное использование будет представлено ниже.
отMaven 3.5.0-beta-1версия, вы можете использовать${revision}
, ${sha1}
а также${changelist}
В качестве заполнителя для замены файла pom.
Примечание. Используйте в более низкой версии Idea.${revision}
При определении родительской версии будет выдаваться ошибка "Сообщает, что использование свойств в родительском определении модулей запрещено", но это не влияет на использование, но Idea не поддерживает такой способ записи.
одномодульный проект
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
</project>
Этот случай проще, просто используйте${revision}
для замены версии.
Также есть еще один способ динамического добавления параметров для указания версии
mvn -Drevision=1.0.0-SNAPSHOT clean package
-D означает установку переменных среды
-D,--define <arg> Define a system property
Или укажите версию в свойствах (родительского) проекта:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
</project>
многомодульный проект
Теперь давайте рассмотрим случай многомодульных сборок. Имеется родительский проект и один или несколько подмодулей. Родительский помпон будет выглядеть так:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<modules>
<module>child1</module>
..
</modules>
</project>
Конфигурация подмодуля:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<version>${revision}</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-child</artifactId>
...
</project>
Версия подмодуля в многомодульном проекте должна использовать версию родительского проекта. Установка версии отдельно приведет к путанице версий.
полагаться
В многомодульной структуре проекта будет много зависимостей модулей.Вы должны использовать ${project.version}, чтобы определить версию зависимости (зависимость в рамках одного и того же родительского проекта).
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<modules>
<module>child1</module>
..
</modules>
</project>
Конфигурация подпроекта:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<version>${revision}</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-child</artifactId>
...
<dependencies>
<dependency>
<groupId>org.apache.maven.ci</groupId>
<artifactId>child2</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
install/deploy
Если вы публикуете с указанными выше настройками, вы должны использоватьflatten-maven-plugin
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<!--是否更新pom文件,记得设置为true,不然无法更新module里的pom版本号-->
<!--此处还有更高级的用法,具体下方的参考文档-->
<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>
</plugins>
</build>
<modules>
<module>child1</module>
..
</modules>
</project>
После окончательного выполнения установки/развертывания maven будет использовать файл pom модуля в${revision}
Замените фактический номер версии, чтобы легко решить проблему номера версии в pom
Ссылаться на
- maven.apache.org/maven-this-put…
- GitHub.com/spring-pro — это…
- Woohoo. Козерог о ха US.org/flatten-name av…
Оригинальность не так проста, пожалуйста, свяжитесь с автором для перепечатки. Если моя статья полезна для вас, пожалуйста, поставьте лайк/добавьте в избранное/подпишитесь, чтобы поддержать и поддержать ее ❤❤❤❤❤❤