Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven在测试后删除资源_Java_Maven_Maven Plugin_Logback_Maven Resources Plugin - Fatal编程技术网

Java Maven在测试后删除资源

Java Maven在测试后删除资源,java,maven,maven-plugin,logback,maven-resources-plugin,Java,Maven,Maven Plugin,Logback,Maven Resources Plugin,我最近读到,在类路径中可以有一个logback.xml和一个logback test.xml,其中测试文件具有更高的优先级 Logback尝试在类路径中查找名为Logback-test.xml的文件 如果没有找到这样的文件,logback会尝试在类路径中找到名为logback.groovy的文件 如果没有找到这样的文件,它将检查类路径中的logback.xml文件 因此,我认为在测试时让日志记录在控制台中进行,并在使用maven构建后将日志记录到一个文件(无需手动更改输出)是一个好主意。

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

  • Logback尝试在类路径中查找名为Logback-test.xml的文件

  • 如果没有找到这样的文件,logback会尝试在类路径中找到名为logback.groovy的文件

  • 如果没有找到这样的文件,它将检查类路径中的logback.xml文件

  • 因此,我认为在测试时让日志记录在控制台中进行,并在使用maven构建后将日志记录到一个文件(无需手动更改输出)是一个好主意。 我找到了
    maven资源插件
    ,它可以
    一些资源。我在插件中指定了如下测试文件(如
    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>
    
    <properties>
        <webdir>WEB-INF/classes</webdir>
    </properties>
    
    
    org.apache.maven.plugins
    maven资源插件
    src/main/resources
    试验/**
    *试验*
    
    这很好,但有一个问题。我确实需要访问
    *test*
    文件(是的,也是
    logback test.xml
    ,因此我不能在测试期间仅排除它而不排除通配符
    *test*
    )和
    test/**
    目录。我只想在测试完成后排除/删除它们。使用此配置,将永远不会复制排除的资源,但我希望先复制它们(使测试可以访问它们),然后(在测试成功运行后)删除它们


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

    事情要简单得多。
    Maven为打包的应用程序提供单独的源/资源,并为执行测试提供源/资源。
    只需在
    src/test/resources
    文件夹中移动
    logbacktest.xml
    。 然后将
    logback.xml
    放在
    src/main/resources

    通过这种方式,
    logbacktest.xml
    将在构建测试期间可用。
    由于该文件位于
    src/test/resources
    ,因此它永远不会包含在您的应用程序中。

    虽然打包的应用程序将只包含并使用
    src/main/resources
    中定义的
    logback.xml
    ,但我找到了自己的解决方案

    删除
    maven资源插件
    。相反,根据您的打包,使用
    maven-jar-plugin
    maven-war-plugin
    ,它负责构建
    jar
    war
    文件(并在测试后运行)


    罐子
    好的,很高兴知道。但是,当测试文件仅位于
    resources/test/
    中时,它们在正常运行时不可用。我希望应用程序测试使用与“正常”程序运行完全相同的资源,但是当我使用maven构建时,我不希望任何测试文件出现在jar中。或者我在这里根本上做错了什么?我感觉你所谓的“测试”不是
    src/test/java
    中的单元测试,而是
    src/main/java
    中的手动测试。是这样吗?不,我的测试是在
    src/test/java/[package]/[Name]ApplicationTests.java
    中进行的。澄清:我在
    src/test/java/[package]/[Name]ApplicationTests.java
    中有自动测试,但有时我也会手动测试。这是件坏事吗?
    <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>
    
    <properties>
        <webdir>WEB-INF/classes</webdir>
    </properties>