Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Camel Maven Plugin

The Camel Maven Plugin allows you to run your Enterprise Integration Patterns using Spring for dependency injection Dependency Injection inside Maven along with being able to support Visualisation along with integration of the Visualisation diagrams into the standard maven reports for your project.

Goals Supported

Documentation

Reference Goal

Description

camel:run

camel:run

Boots up Camel in a new JVM 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).

camel:embedded

camel:embedded

Boots up Camel in the same JVM as Maven 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).

camel:dot

camel:dot

deprecated: Generates DOT files and then HTML, PNG, SVG files for your EIP routing rules with integration into Maven Reports. This plugin only supports Spring XML files.

camel:validatecamel:validateCamel 2.19: To validate your source code for invalid Camel endpoint uris.

Adding the plugin to your pom.xml

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

Note

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 (;).

Code Block
langlanguagexml

<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.

 

Code Block
langlanguagexml

<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

In From Camel 1.4 onwards loading file based spring Spring context files via a file location is also supported. You configure this with the new fileApplicationContextUri option fileApplicationContextUri. Paths may be split using a semi-colon (;). This sort of file location is usable useful for web application projects that is web applications and you 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.

Code Block
langlanguagexml

<plugin>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <fileApplicationContextUri>src<fileApplicationContextUri>
      src/main/webapp/WEB-INF/camel*.xml<.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.

...

Code Block
titlesrc/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:

Code Block

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: []

...

For example add the following into your pom

Code Block
langlanguagexml

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>  
</project>

Then when you run

Code Block
languagebash

mvn site

Your context will be booted up via the META-INF/spring/*.xml files, the DOT file generated and a nice HTML report created.

...