Maven测试后删除资源

Maven delete resources after testing

我最近读到你可以在你的类路径中有一个 logback.xml 和一个 logback-test.xml,其中测试文件具有更高的优先级。

  1. Logback tries to find a file called logback-test.xml in the classpath.

  2. If no such file is found, logback tries to find a file called logback.groovy in the classpath.

  3. If no such file is found, it checks for the file logback.xml in the classpath..

Source

所以我认为在测试时让日志记录在控制台中发生并在使用 maven 构建后记录到文件中(无需手动更改输出)是个好主意。 我找到了 maven-resources-plugin,里面可以 <exclude> 一些资源。我在插件中指定了这样的测试文件(如 logback-test.xml):

pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>test/**</exclude>
                    <exclude>*test*</exclude>
                </excludes>
            </resource>
        </resources>
    </configuration>
</plugin>

效果很好,但有一个问题。我绝对需要访问 *test* 文件(是的,还有 logback-test.xml,所以我不能只排除它而不是通配符 *test*)和测试期间的 test/** 目录。我只想在测试完成后 exclude/delete 它们。使用此配置,永远不会复制排除的资源,但我希望首先复制它们(以便测试可以访问它们)然后(在测试 运行 成功后)删除它们。

我怎样才能做到这一点?我一直在寻找“maven 删除插件”,但找不到。

事情就简单多了。
Maven 将 sources/resources 用于打包应用程序,将 sources/resources 用于执行测试。
只需将 logback-test.xml 移动到 src/test/resources 文件夹中。 并将 logback.xml 放在 src/main/resources 中。

这样,logback-test.xml 将在您的构建测试期间可用。
由于该文件位于 src/test/resources,它永远不会包含在您的应用程序中。
打包的应用程序将仅包含和使用 src/main/resources.

中定义的 logback.xml

我找到了自己的解决方案。

删除maven-resource-plugin。相反,根据您的包装,使用 maven-jar-pluginmaven-war-plugin 负责构建 jarwar 文件(并在测试后稍后运行)。


罐子

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <excludes>
            <exclude>test/**</exclude>
            <exclude>*test*</exclude>
        </excludes>
    </configuration>
</plugin>

war

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <packagingExcludes>${webdir}/test/**,${webdir}/*test*</packagingExcludes>
    </configuration>
</plugin>

其中 webdir 是从构建的 war 文件到类路径根目录的路径。您可以将它添加到您的 <properties> 标签(直接在 <project> 标签下)。在我的例子中是 WEB-INF/classes.

pom.xml

<properties>
    <webdir>WEB-INF/classes</webdir>
</properties>