在最终编译时删除调试方法

时间:2017-05-24 22:04:14

标签: java maven logging system.out

我经常需要调试消息进行编程。每次我发布新版本之前,我都要删除它们,然后在编译完所有内容后再添加它们。有没有办法在使用maven编译时忽略特定的方法调用?

例如,如果代码如下:

int i = 10;

@Debug System.out.println(i);

doSomething(i);

当我想编译最终版本时,它会删除用@Debug标记的所有内容。

2 个答案:

答案 0 :(得分:1)

在Java生产代码中,最好使用记录器而不是System.out

这样可以让您配置所需的日志级别。

即调试本地测试和发布信息(或错误)。

答案 1 :(得分:0)

无法在方法正文中指定注释

以下是可能的用途:

    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE

所以你不能用这种方式使用注释。

此外,Maven构建执行不应该改变类的行为 您应该避免在构建的组件中创建变体。这可能会在没有开发环境的情况下产生惊喜。

如果要在某些特定环境中排除调试信息,请使用日志记录机制(例如Log4j或Logback),而不是使用非编写调试信息的标准输出(System.out.println)。
在开发期间,使用日志配置来启用属于特定软件包的类的调试级别,并且在没有开发环境中,使用日志配置来禁用这些相同类的调试级别。