如何使用Maven(新构建时间戳文件夹和最新文件夹)构建商店



当我使用maven构建项目时,我想在每个构建中创建一个新文件夹。

以下我的要求:

  1. 为项目的每个模块创建jar-files。
  2. 使用名称 build_'current-date-with time'在某些外部目录
  3. 中创建名称的创建文件夹
  4. 将jar-files复制到 build_'current-date-with-time'/libs
  5. 将配置文件复制到 build_'current-date-with-time'/conf
  6. 将所有这些都复制到最新文件夹(此文件夹中的文件将更改为最新构建)

问题

  • 如何添加"当前日期 - 时间"以构建路径?
  • 如何将罐子移至外部文件夹?
  • 如何将其他文件移至该文件夹,以及如何将所有这些文件再次移动到一个文件夹?

这是如何完成它的示例:

  • 使用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配置为将项目工件包装到两个目录(最新和构建),我建议使用两个不同的Maven classifier(时间戳和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.directorybuild.store.directory.latest属性的目标文件夹。

根据其他要求,可以轻松地添加到此配置文件中的其他改进和配置。

相关内容

  • 没有找到相关文章

最新更新