【问题标题】:logback-test.xml and multi-module maven projectlogback-test.xml 和多模块 maven 项目
【发布时间】:2012-03-16 17:04:42
【问题描述】:

在我的 maven 项目中,我有一个模块依赖于另一个模块,它是测试代码/资源:

...
<scope>test</scope>
<type>test-jar</type>
...

现在,两个模块都有自己的 logback-test.xml,每个模块都有特定的配置,用于在该特定模块中运行测试。然而,正如预期的那样,在子模块中运行测试时,logback 会抱怨路径中有多个 logback-test.xml 的警告,并且使用它的默认日志配置来做到这一点:

08:44:17,528 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
08:44:17,530 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:path/to/my/project/module2/logback-test.xml]
08:44:17,532 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs multiple times on the classpath.
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module2/logback-test.xml]
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module1/logback-test.xml]
08:44:17,636 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
08:44:17,647 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
08:44:17,653 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
08:44:17,692 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
08:44:17,764 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
08:44:17,764 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.myproject] to TRACE
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF
08:44:17,768 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5b0a485c - Registering current configuration as safe fallback point

我想知道如何解决这个问题。我想为每个模块保留多个配置;我想我不能从类路径中排除一个文件;我真的只是想回退以对我知道的事情闭嘴。从最后两行可以看出,我的配置中确实有整个 logback 包处于“关闭”状态,但在那之后它仍然会继续记录。日志模式也与我在任一配置中配置的不同。

Logback 是通过 SLF4J 在代码中配置和使用的。

当在父模块中运行测试时,这些都没有被记录(既没有 INFO 也没有 WARN 消息),所以除了奇怪的 Logback 行为之外,我不能把它归咎于其他任何事情。

【问题讨论】:

    标签: maven maven-3 logback


    【解决方案1】:

    您可以从测试 jar 中排除 logback-test.xml

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                <configuration>
                    <excludes>
                        <excludes>logback-test.xml</excludes>
                    </excludes>
                </configuration>
            </execution>
        </executions>               
    </plugin>
    

    或者(我没有尝试过)您可以使用命名约定 logback-test-project.a.xml、logback-test-project.b.xml 等,并在每个项目中使用 -Dlogback.configurationFile=logback-test-project.a.xml 以不同方式配置surefire。

    【讨论】:

    • 排除解决方案仅在一种情况下解决了问题:在一个模块上运行测试时,所有其他依赖项都是来自存储库的 jar。但是,从 Eclipse 运行一个单元测试(我猜这是 Maven 与事情无关的点),或者在父 pom 上运行“干净测试”,不受此配置的影响。不幸的是,前两种是我运行测试用例最常用的方式。
    • 你的父 POM 有自己的logback-test 还是纯粹的聚合器?
    • 不,父级中没有代码。我正在考虑在父级中设置日志记录,但我真的想为每个模块设置不同的日志记录设置。
    • 这让我发疯了。现在我们的每个项目都有一个单独的 logback-.xml 并且 jvm 选择运行时。恢复理智,谢谢。
    • 依赖测试 jars 有点痛苦;尝试将您想要重用的测试代码移动到它自己的适当模块中,然后将其 logback-test.xml 放入适当的位置{module}/src/test/resources/logback-test.xml,以便它仅可用于此模块中的测试,然后@ 987654328@ 自动将其从 jar 工件中排除。现在您的其他模块可以在测试范围内依赖此测试实用程序 jar。 (我也开始尝试在其他模块的其他测试中重用来自一个 test-jar 的代码,但最终将其重构为自己的模块。)
    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 2011-04-07
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多