【问题标题】:Use Maven to pre-process source code that is going to be built with Maven使用 Maven 预处理将使用 Maven 构建的源代码
【发布时间】:2015-07-10 09:29:21
【问题描述】:

我有以下示例源代码:

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 客户端的通信,我想编写一个 Maven 插件,可用于 API 预处理。该插件将环境列表作为参数,以弃用所有提供的环境中不支持的所有方法。

一些例子:

  • 我用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 中的所有源代码。原始来源应保持不变,以便随时重现。这可能吗?

【问题讨论】:

标签: java maven build preprocessor


【解决方案1】:

Preprocessing source code as a part of a maven build 似乎是一个答案,但实际上并非如此,因为它忽略了很多细节:

  1. Maven 可以在构建期间调用外部工具,但您仍然需要一个工具来处理您的源代码。
  2. 您打算如何让 Maven Java 编译器远离src/*/java 中的文件?如果不正确,它将尝试编译原始源代码和转换后的源代码。
  3. 您打算如何编辑原始来源?如果您将原始源代码移动到不同的文件夹,m2e 等工具会阻止您在 Eclipse 等中编辑它们,因为它们会读取您的 POM 以确定路径。
  4. 查看代码的开发人员会非常困惑,因为他们已经习惯了 Maven,而 Maven 说:“src/*/java 中的源代码将被编译并最终出现在工件中”。所以你违反了约定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多