工具

Camel Maven 插件

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

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

Camel Maven 插件

Camel Maven 插件支持以下目标(goal)

  • camel:run - 运行你的 Camel 应用程序
  • camel:dev - 以开发者模式运行你的 Camel 应用程序
  • camel:debug - 以调试模式运行你的 Camel 应用程序
  • camel:prepare-fatjar - 为将你的 Camel 应用程序打包成 fat-jar(例如通过 maven-assembly-plugin)做准备

camel:run

Camel Maven 插件的 camel:run 目标用于在 Maven 启动的独立 JVM 中运行你的 Camel Spring 配置。Spring 示例是一个很好的入门示例应用。

cd examples/camel-example-spring
mvn camel:run

这使得启动并测试你的路由规则变得非常简单,无需编写 main(…) 方法;它还允许你创建多个 jar 来承载不同的路由规则集合,并轻松地对它们分别进行测试。

其工作原理是:插件会编译 Maven 项目中的源代码,然后使用类路径上 META-INF/spring/*.xml 中的 XML 配置文件启动一个 Spring ApplicationContext。

如果你想让 Camel 路由启动得更快一些,可以尝试改用 camel:embedded。

选项

Maven 插件的 run 目标支持以下选项,这些选项可以通过命令行配置(使用 -D 语法),也可以在 pom.xml 文件的 <configuration> 标签中定义。

参数默认值说明
duration-1设置应用程序在终止前运行的时间长度(秒)。取值小于等于 0 将永久运行。
durationIdle-1设置应用程序在终止前允许的空闲时间长度(秒)。取值小于等于 0 将永久运行。
durationMaxMessages-1设置应用程序在终止前处理的最大消息数量。
logClasspathfalse启动时是否记录类路径
loggingLevelOFF是否使用内置的控制台日志(基于 log4j),这样无需向项目中添加任何日志依赖。不过,日志固定输出到控制台,样式与 Spring Boot 类似的彩色风格。可以将根日志级别设置为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE、OFF
profile使用指定的 Camel Main 配置文件(dev、test、prod)运行

记录类路径

可以配置在执行 camel:run 时是否输出类路径日志。可在配置中通过以下方式启用该功能:

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <logClasspath>true</logClasspath>
  </configuration>
</plugin>

使用内置日志

如果希望快速将日志输出到控制台,可以通过如下方式设置日志级别来使用内置日志:

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <loggingLevel>INFO</loggingLevel>
  </configuration>
</plugin>

这会以控制台日志方式运行应用,输出带颜色,风格与 Spring Boot 的日志类似。此功能默认关闭,以便使用项目中已配置的日志系统。

内置日志的意义在于:有时你不想费心配置日志,只想快速、简便地在控制台输出美观的日志信息。

camel:dev

camel:dev 是 camel:run 的扩展,用于以开发者模式运行 Camel 应用。在此模式下,Camel 会(除其他功能外)对位于 src/main/resources 目录下的 DSL 路由(xml、yaml 和 java)进行热重载。

选项

Maven 插件的 dev 目标支持以下选项,可在命令行中配置(使用 -D 语法),或在 pom.xml 文件的 <configuration> 标签中定义。

参数默认值说明
routesDirectorysrc/main/resources监视该目录中的文件更改,从而触发 Camel 路由的即时热重载。
duration-1设置应用程序在终止前运行的时间(秒)。取值 ⇐ 0 表示永久运行。
durationIdle-1设置应用程序在终止前可以保持空闲的时间(秒)。取值 ⇐ 0 表示永久运行。
durationMaxMessages-1设置应用程序在终止前处理的最大消息数量所对应的时长。
logClasspathfalse启动时是否记录 classpath
loggingLevelOFF是否使用内置的控制台日志(基于 log4j),无需向项目中添加任何日志依赖。不过,日志输出固定为控制台,其颜色样式与 Spring Boot 类似。你可以将根日志级别更改为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE、OFF
profiledev使用指定的 Camel Main profile 运行(dev、test、prod)

camel:debug

camel:debug 是 camel:dev 的扩展,用于以调试模式运行 Camel 应用程序,借助 Camel 文本化路由调试器,可以对 Camel 路由进行调试。

选项

Maven 插件的 debug 目标支持以下选项,这些选项既可以从命令行配置(使用 -D 语法),也可以在 pom.xml 文件的 <configuration> 标签中定义。

参数默认值描述
suspendtrue指示在尚未附加调试器期间,是否应挂起 Camel 执行的消息处理。

camel:prepare-fatjar

Camel Maven 插件的 camel:prepare-fatjar 目标用于为你的 Camel 应用程序打包成 fat jar(可执行 jar)做好准备。该目标会扫描 Maven 依赖项以发现 Camel JAR,并提取其中的类型转换器,然后将它们合并为一个 uber 文件,存储在 target/classes/META-INF/services/org/apache/camel/UberTypeConverterLoader 中。

这个 uber 加载器文件包含了 Camel 应用程序在运行时使用的所有合并后的类型转换器,它们被合并到了这一个文件中。

这样做是必需的,因为否则 fat jar 的 Maven 插件(例如 maven-assembly-plugin 或 maven-shade-plugin)会导致 TypeConverterLoader 文件在打包后的 JAR 中被覆盖,从而使 Camel 无法加载全部的类型转换器。

UberTypeConverterLoader 确保所有类型转换器都能被加载,因为该文件包含了所有已知的类型转换器文件。

要使用此目标,你可以在 Camel 应用程序的 pom.xml 文件中添加以下内容:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
        <version>${camel.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>prepare-fatjar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

例如,要与 maven-assembly-plugin 一起使用,可以按如下方式操作。请记得将 com.foo.NameOfMainClass 替换为你自己的主类的类名:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
        <version>${camel.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>prepare-fatjar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.foo.NameOfMainClass</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>

评论

登录后参与评论

正在加载评论…