当我使用maven构建项目时,我想在每个构建中创建一个新文件夹。
以下我的要求:
- 为项目的每个模块创建jar-files。
- 使用名称 build_'current-date-with time'在某些外部目录 中创建名称的创建文件夹
- 将jar-files复制到 build_'current-date-with-time'/libs
- 将配置文件复制到 build_'current-date-with-time'/conf
- 将所有这些都复制到最新文件夹(此文件夹中的文件将更改为最新构建) )
问题:
- 如何添加"当前日期 - 时间"以构建路径?
- 如何将罐子移至外部文件夹?
- 如何将其他文件移至该文件夹,以及如何将所有这些文件再次移动到一个文件夹?
这是如何完成它的示例:
- 使用maven
${maven.build.timestamp}
属性作为目录名称后缀,具有带有时间戳的动态目录 - 如果需要,重新定义
maven.build.timestamp.format
,以删除可能在某些OS中引起问题的:
默认字符。例如,到值yyyy-MM-dd_HH-mm-ss
(_
替换:
) - 在执行此构建活动之前,配置
maven-clean-plugin
以清理latest
文件夹。官方文档已经提供了如何删除其他文件
的示例 - 通过两个不同的插件执行,将
maven-resources-plugin
配置为将项目资源复制到latest
和新构建存储文件夹。官方文档已经提供了一个有关如何复制资源的示例 - 将
maven-jar-plugin
配置为将项目工件包装到两个目录(最新和构建),我建议使用两个不同的Mavenclassifier
(时间戳和latest
是完美的候选者)。官方文档Alread提供了有关如何附加其他罐子
的示例 - 通过两个插件执行,将
maven-dependency-plugin
配置为将项目依赖项复制到两个文件夹。官方文档已经提供了一个有关如何复制项目依赖关系的示例 - 将整个构建配置放在Maven配置文件中,以免将其作为默认行为却能够按需调用
这是上述完整实现,已经放置在个人资料中:
<profile>
<id>build-store</id>
<properties>
<maven.build.timestamp.format>yyyy-MM-dd_HH-mm-ss</maven.build.timestamp.format>
<build.store.directory>c:build_${maven.build.timestamp}</build.store.directory>
<build.store.directory.latest>c:latest</build.store.directory.latest>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<filesets>
<fileset>
<directory>${build.store.directory.latest}</directory>
<includes>
<include>**/*</include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-dependencies-to-build-store</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory}</outputDirectory>
<classifier>${maven.build.timestamp}</classifier>
</configuration>
</execution>
<execution>
<id>copy-dependencies-to-latest</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory.latest}</outputDirectory>
<classifier>latest</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies-to-build-store</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory}/libs</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
<execution>
<id>copy-dependencies-to-latest</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory.latest}/libs</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-resources-build-store</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory}/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-resources-latest</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${build.store.directory.latest}/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
通过:
调用构建mvn clean package -P build-store
然后将清理latest
文件夹内容,根据构建时间戳创建一个新文件夹,将所需的文件移动到其和latest
文件夹中。
您可以定义编辑build.store.directory
和build.store.directory.latest
属性的目标文件夹。
根据其他要求,可以轻松地添加到此配置文件中的其他改进和配置。