Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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预处理将使用Maven构建的源代码_Java_Maven_Build_Preprocessor - Fatal编程技术网

Java 使用Maven预处理将使用Maven构建的源代码

Java 使用Maven预处理将使用Maven构建的源代码,java,maven,build,preprocessor,Java,Maven,Build,Preprocessor,我有以下示例源代码: 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。为了传达在哪种

我有以下示例源代码:

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注释:

No@Support注释意味着相应的方法不依赖于环境 空@Support注释意味着在所有环境中都支持相应的方法 参数化@Support注释意味着仅在作为注释参数提供的环境中支持相应的方法。 为了改进与API客户机的通信,我想编写一个Maven插件,用于API预处理。该插件将使用环境列表作为参数,以弃用所有提供的环境中不支持的所有方法

一些例子:

我使用环境_A运行插件:对界面没有影响。环境_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运行插件:

换句话说,在编译src/main/java中的源代码之前,该插件应该根据上述规则转换src/main/java中的所有源代码。原始来源应保持不变,以便随时复制。这可能吗?

似乎是一个答案,但事实并非如此,因为它忽略了很多细节:

Maven可以在构建期间调用外部工具,但您仍然需要一个工具来处理源代码。 您打算如何让Maven Java编译器远离src/*/Java中的文件?如果不正确,它将尝试编译原始源代码和转换后的源代码。 您计划如何编辑原始来源?如果您将原始源文件移动到另一个文件夹,像m2e这样的工具将阻止您在Eclipse中编辑它们,因为它们读取您的POM来确定路径。 查看代码的开发人员将非常困惑,因为他们习惯于Maven,Maven说:src/*/java中的源代码将被编译并最终保存在工件中。所以你违反了惯例。
可能重复的。。。好吧,我为什么不用谷歌搜索一下呢?
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();
}