java - 通过 maven a.k.a 发布时禁用 lombok 日志记录作为 maven 驱动的功能翻转

标签 java maven logging release lombok

如何在通过 maven 发布项目时优雅地禁用项目中的所有日志?

我有一个使用 Lombok 的库,是通过 maven 构建的。我使用 @log(java.util.Logger 的快捷方式)注解并希望在正常构建期间获取日志并在 lib 的发行版本中删除日志(理想情况下甚至不编译)。

提前致谢。

这个问题确实更大,它都是关于通过 maven 驱动功能翻转:根据 maven 构建周期在代码中启用或不启用功能。

最佳答案

有一种相对简单且非常有效的方法可以通过 maven 启用功能翻转:

在您的代码中,使用常量激活或不激活日志。记录调用,将在编译时删除:

static {
    log.getParent().setLevel(FeatureFlip.LOG_LEVEL);
}

现在有趣的部分是根据其构建周期通过 Maven 生成此常量的值。

把这个文件放在src/main/java-templates里面

import java.util.logging.Level;

//This file will be filtered with maven properties.
public class FeatureFlip {

    public static final Level LOG_LEVEL = ${log.level};
}

它将使用 templating-maven-plugin 注入(inject) maven 属性:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>templating-maven-plugin</artifactId>
    <version>1.0-alpha-3</version>
    <executions>
        <execution>
            <id>filter-src</id>
            <goals>
                <goal>filter-sources</goal>
            </goals>
            <phase>process-sources</phase>
        </execution>
    </executions>
</plugin> 

定义正常构建的默认值:

<log.level>Level.ALL</log.level>

在发布配置文件中为此属性定义一个新值:

<profile>
    <id>release</id>
    <properties>
        <log.level>Level.OFF</log.level>
    </properties>
</profile>

现在在 Release模式下激活此配置文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <configuration>
        <arguments>-Prelease</arguments>
    </configuration>
</plugin>

这种激活发布配置文件的方式适用于 release:prepare 和 release:perform 目标。另一种方法是仅在发布期间获取它:执行是通过以下方式激活发布配置文件:

    <activation>
        <property>
            <name>performRelease</name>
            <value>true</value>
        </property>
    </activation>

但它无法通过 release:prepare -DdryRun=true 进行测试。


要获得有效的 Eclipse 配置,请添加:

    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.codehaus.mojo
                                    </groupId>
                                    <artifactId>
                                        templating-maven-plugin
                                    </artifactId>
                                    <versionRange>
                                        [1.0-alpha-3,)
                                    </versionRange>
                                    <goals>
                                        <goal>filter-sources</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

完整的工作示例 here .

关于java - 通过 maven a.k.a 发布时禁用 lombok 日志记录作为 maven 驱动的功能翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456107/

相关文章:

java - ClassPathXmlApplicationContext 错误,Spring 框架

mysql - 在插入或更新时获取完整的 MySQL 查询字符串

git - 所有 svn 修订号的映射 <=> git SHA-1 提交哈希

c# - 如何从同一应用程序的两个实例安全地写入日志文件?

java - 在 ubuntu 10.04 上安装 openjdk-7-jre - 包 openjdk-7-jre 没有安装候选

java - 如何使用 Apache spark 计算平均值?

java - 在 Java 中将 StreamWriter 转换为 OutputStream?

java - Cassandra NoHostAvailableException 仍然存在节点

java - Eclipse - org.junit 无法解析,即使它在 Maven 依赖项中

eclipse - Maven 从命令行安装但从 Eclipse UI 传递时测试失败