Maven测试后删除资源
Maven delete resources after testing
我最近读到你可以在你的类路径中有一个 logback.xml
和一个 logback-test.xml
,其中测试文件具有更高的优先级。
Logback tries to find a file called logback-test.xml in the classpath.
If no such file is found, logback tries to find a file called logback.groovy in the classpath.
If no such file is found, it checks for the file logback.xml in the classpath..
所以我认为在测试时让日志记录在控制台中发生并在使用 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-plugin
或 maven-war-plugin
负责构建 jar
或 war
文件(并在测试后稍后运行)。
罐子
<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>
我最近读到你可以在你的类路径中有一个 logback.xml
和一个 logback-test.xml
,其中测试文件具有更高的优先级。
Logback tries to find a file called logback-test.xml in the classpath.
If no such file is found, logback tries to find a file called logback.groovy in the classpath.
If no such file is found, it checks for the file logback.xml in the classpath..
所以我认为在测试时让日志记录在控制台中发生并在使用 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-plugin
或 maven-war-plugin
负责构建 jar
或 war
文件(并在测试后稍后运行)。
罐子
<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>