Camel Maven Plugin

The Camel Maven Plugin allows you to run your Enterprise Integration Patterns using Spring for Dependency Injection inside Maven.

Goals Supported

Documentation Goal Description

camel:run

camel:run

Boots up Camel in the context of a separately initiated Java thread using the Spring configuration at META-INF/spring/.xml* and runs your routing rules. From Camel 2.10 onwards also OSGi blueprint is supported to load from OSGI-INF/blueprint/.xml* (requires to configure the plugin to use blueprint).

Adding the plugin to your pom.xml

Add the following in your <build><plugins> section

You may override the default Spring application context file uri META-INF/spring/.xml* by using the applicationContextUri property in the camel-maven-plugin configuration. Paths may be split using a semi-colon (;).

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <applicationContextUri>META-INF/spring/*.xml;YOUR_FILE_NAME_IN_THE_CLASS_PATH.xml</applicationContextUri>
  </configuration>
</plugin>

You can also specify what Main class to use when running the plugin. By default this is org.apache.camel.spring.Main.

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <!-- optional, default value: org.apache.camel.spring.Main -->
  <configuration>
    <mainClass>mypackage.boot.camel.CamelStartup</mainClass>
  </configuration>
</plugin>

File based spring configuration files

From Camel 1.4 onwards loading Spring context files via a file location is also supported. You configure this with the fileApplicationContextUri option. Paths may be split using a semi-colon (;). This sort of file location is useful for web application projects that store spring configuration files in WEB-INF. It can also be used to replace configuration that requires an OSGi container with an equivalent non-OSGi configuration.

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <fileApplicationContextUri>
      src/main/webapp/WEB-INF/camel*.xml;
      src/test/spring/test-context.xml
    </fileApplicationContextUri>
  </configuration>
</plugin>

Classpath

The plugin will construct a classpath of any Maven dependency with scope "compile". The classpath is output as an INFO log statement upon startup.

Route Information

Information about the generated routes is available through the GraphViz report, and also through the log statements generated by the run goal. If you would like to see this information then add a log4j (or other commons-logging implementation) config file with the following levels.

src/main/resources/log4.properties

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.org.apache.camel.impl.DefaultCamelContext=DEBUG, stdout
log4j.additivity.org.apache.camel.impl.DefaultCamelContext=false

This should produce a log statement similar to:

670  [org.apache.camel.spring.Main.main()] DEBUG org.apache.camel.impl.DefaultCamelContext
  - Adding routes from: Routes: [Route[ [From[jms:queue:queueA]] -> [To[jms:queue:queueB], To[jms:queue:queueC]]]] routes: []