如何从 mvn clean deploy 生成的 maven 工件中删除日期时间后缀和增量 #?
How to remove the datetime suffix and increment # from the produced maven artifact from mvn clean deploy?
我有一个基于 Spring Boot
的 java
应用程序,当我 运行 mvn clean install
的名称为 my-nexus-demo-0.0.1-SNAPSHOT.jar
时,它正在生成一个 JAR
工件.
但是当我执行 mvn clean deploy
时,我看到 my-nexus-demo-0.0.1-20190806.161150-1.jar
部署在我的本地文件系统中(将来会使用 Nexus
)。不确定为什么在我使用 mvn clean deploy
命令时附加日期时间和增量 # 作为后缀。
我已经在我的 pom
中提到了 <finalName>${project.artifactId}</finalName>
并且还指定了 <uniqueVersion>false</uniqueVersion>
。
我有几个问题:
- 如何在
.m2
以及 SNAPSHOT
和 RELEASE
存储库中使用一致的工件名称?
- 开发人员在构建和部署工件时应遵循的最佳实践是什么?工件名称不应该始终保持一致吗?
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>my-nexus-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>my-nexus-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>pet-projects-snapshot-repo</id>
<name>My Local Nexus Snapshots Repository</name>
<url>file://I/.m2/my-nexus/pet-projects-snapshot-repo</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
</project>
您所描述的是预期的行为。在本地,由于快照版本仅使用后缀 0.0.1-SNAPSHOT
保存,而在远程存储库(您 deploy
到的存储库)上,快照版本使用时间戳保存。不过,这并不重要,因为如果您请求版本 0.0.1-SNAPSHOT
的依赖项,Maven 足够聪明,可以为您提供该特定版本号的最新时间戳版本。所以它实际上只是一个实现细节。
当您的工件准备好投入生产时,您构建一个 Release 版本(例如使用 maven-release-plugin)并获得一个没有 SNAPSHOT 或时间戳的版本号。
我有一个基于 Spring Boot
的 java
应用程序,当我 运行 mvn clean install
的名称为 my-nexus-demo-0.0.1-SNAPSHOT.jar
时,它正在生成一个 JAR
工件.
但是当我执行 mvn clean deploy
时,我看到 my-nexus-demo-0.0.1-20190806.161150-1.jar
部署在我的本地文件系统中(将来会使用 Nexus
)。不确定为什么在我使用 mvn clean deploy
命令时附加日期时间和增量 # 作为后缀。
我已经在我的 pom
中提到了 <finalName>${project.artifactId}</finalName>
并且还指定了 <uniqueVersion>false</uniqueVersion>
。
我有几个问题:
- 如何在
.m2
以及SNAPSHOT
和RELEASE
存储库中使用一致的工件名称? - 开发人员在构建和部署工件时应遵循的最佳实践是什么?工件名称不应该始终保持一致吗?
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>my-nexus-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>my-nexus-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>pet-projects-snapshot-repo</id>
<name>My Local Nexus Snapshots Repository</name>
<url>file://I/.m2/my-nexus/pet-projects-snapshot-repo</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
</project>
您所描述的是预期的行为。在本地,由于快照版本仅使用后缀 0.0.1-SNAPSHOT
保存,而在远程存储库(您 deploy
到的存储库)上,快照版本使用时间戳保存。不过,这并不重要,因为如果您请求版本 0.0.1-SNAPSHOT
的依赖项,Maven 足够聪明,可以为您提供该特定版本号的最新时间戳版本。所以它实际上只是一个实现细节。
当您的工件准备好投入生产时,您构建一个 Release 版本(例如使用 maven-release-plugin)并获得一个没有 SNAPSHOT 或时间戳的版本号。