我有以下示例源代码:
public interface SomeInterface {
void method1();
@Support
void method2();
@Support(ENVIRONMENT_A)
void method3();
@Support({ ENVIRONMENT_A, ENVIRONMENT_B })
void method4();
}
上述API可用于各种环境,其中包括A
和B
(例如,A = Oracle,B = MySQL)。为了传达在哪个环境中支持哪种方法,我添加了@Support
注释,其中包含以下语义:
@Support
注释意味着相应的方法不依赖于环境@Support
注释意味着所有环境都支持相应的方法@Support
注释意味着仅在作为注释参数提供的环境中支持相应的方法。为了改善与API客户端的这种通信,我想编写一个可用于API预处理的Maven插件。该插件将环境列表作为参数,以便弃用所有提供的环境中不支持的所有方法。
一些例子:
ENVIRONMENT_A
运行插件:对界面没有影响。 ENVIRONMENT_A
我使用ENVIRONMENT_B
运行插件:生成的界面应如下所示
public interface SomeInterface {
void method1();
@Support
void method2();
/* @deprecated - Not supported in ENVIRONMENT_B */
@Support(ENVIRONMENT_A)
@Deprecated
void method3();
@Support({ ENVIRONMENT_A, ENVIRONMENT_B })
void method4();
}
我使用ENVIRONMENT_A
和ENVIRONMENT_B
运行插件:
public interface SomeInterface {
void method1();
@Support
void method2();
/* @deprecated - Not supported in both ENVIRONMENT_A *AND* ENVIRONMENT_B */
@Support(ENVIRONMENT_A)
@Deprecated
void method3();
@Support({ ENVIRONMENT_A, ENVIRONMENT_B })
void method4();
}
换句话说,在编译src / main / java中的源代码之前,该插件应该根据上述规则转换src / main / java中的所有源代码。原始来源应保持不变,以便随时可以重现。这可能吗?
答案 0 :(得分:0)
Preprocessing source code as a part of a maven build似乎是一个答案,但实际上并不是因为它忽略了很多细节:
src/*/java
中的文件?如果你没有把它弄好,它将尝试编译原始源和转换后的源。