Camel 开发者控制台

Camel 组件 Maven 插件

师成师成· 更新于 2026-09-28· 阅读 11 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Camel Component Maven Plugin

Camel Component Maven Plugin 允许第三方组件开发者生成自 Camel 3.x 起配置所需的全部元数据与 Java 类。这些元数据文件和 Java 文件可以让您的组件运行更高效、更快速。

支持的目标

支持以下目标:

generate

该目标将生成以下元数据文件和 Java 文件:

  • Jandex 索引:它会为项目中使用的 Java 注解生成 Jandex 索引,从而更高效地搜索和加载这些注解,以便生成下述的其他元数据。
  • 类型转换器加载器(Type Converter Loader):它会为标注了 @Converter(loader = true) 的类型转换器生成加载器,使 Camel 能够更快地加载这些转换器。
  • SPI:它会为组件生成所有的服务提供者接口(SPI)。这样 Camel 无需将其手动添加到 Camel 上下文中即可自动发现您的组件。
  • 配置器(Configurers):它会根据标注了 @Configurer 的类生成所有的配置器 Java 类。
  • Endpoint 模式(Endpoint Schema):它会生成属性配置器以及从组件的 Endpoint 类和 Component 类中提取的模式 JSON。这使 Camel 在配置属性时无需使用反射,从而获得更好的效率。
  • Endpoint URI 工厂:它会生成用于从属性 Map 构建 URI 的端点工厂。
  • Invoke on Header:它会为使用 @InvokeOnHeader 的组件生成源代码。
  • Prepare Component:它会分析 Maven 模块是否包含诸如 components、dataformats、languages 等 Camel 模块,并为其中每一项生成额外的描述符和模式文件,以便在 Camel 和工具链中更轻松地自动发现。
  • Validate Component:它会校验 Camel 组件中 components、dataformats、languages 等的元文件是否都包含所需的元数据,例如分配的标签、每个选项的文档等。
为了使插件正常工作,你的组件中需要具备相应的 Camel 注解。例如组件类使用 @Component、端点类使用 @UriEndpoint、@UriParams 等。你可以在 GitHub 上现有的任意 Camel 组件中查看这些注解的使用方式。更好的做法是,使用 Camel Maven Archetypes 来初始化组件项目,它已经包含了组件所需的全部基础设施,例如必要的初始 Java 类、注解以及 Maven pom.xml。

将插件添加到你的 pom.xml 中

如果你没有使用 Camel Maven Archetypes 来初始化组件项目,则需要在 pom.xml 的构建(build)部分添加以下内容:

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-component-maven-plugin</artifactId>
  <version>${camel-version}</version>
  <executions>
    <execution>
      <id>generate</id>
      <goals>
        <goal>generate</goal>
      </goals>
      <phase>process-classes</phase>
    </execution>
   </executions>
</plugin>

这将把插件的 generate 目标绑定到 Maven 的 process-classes 阶段,以便在编译时生成上述所有必需的文件。

因此,mvn test、mvn package、mvn verify 和 mvn install 阶段都应该会运行该插件。

重新编译以包含最新生成的代码

camel-component-maven-plugin 在编译器之后执行,由于它输出的是 Java 源代码,因此编译器必须再次执行(仅当源代码确实发生变化时才会进行编译)。

为确保这一点,应在 pom.xml 文件中添加以下内容:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <executions>
        <execution>
            <id>recompile</id>
            <goals>
                <goal>compile</goal>
            </goals>
            <phase>process-classes</phase>
        </execution>
    </executions>
</plugin>

配置输出目录

该插件默认将输出生成到以下目录:

  • src/generated/java —— 用于生成的 Java 源代码
  • src/generated/resources —— 用于生成的资源文件

若要让 Java 编译器包含这些文件夹,你可以配置 Maven 将这些目录纳入其中:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
                <goal>add-resource</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/generated/java</source>
                </sources>
                <resources>
                    <resource>
                        <directory>src/generated/resources</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

不过,如果需要,你也可以将 camel-component-maven-plugin 配置为直接输出到 src/main,如下所示(这样就不必像上面那样使用 build-helper-maven-plugin 了):

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-component-maven-plugin</artifactId>
  <version>${camel-version}</version>
  <configuration>
    <sourcesOutputDir>src/main/java</sourcesOutputDir>
    <resourcesOutputDir>src/main/resources</resourcesOutputDir>
  </configuration>
  <executions>
    <execution>
      <id>generate</id>
      <goals>
        <goal>generate</goal>
      </goals>
      <phase>process-classes</phase>
    </execution>
   </executions>
</plugin>

评论

登录后参与评论

正在加载评论…