There is good news, bad news, and good news again ;-)

*Good news:* Now that Camel 2.18 is officially on JDK8, we can use lambdas
in our code. Woohoo!

*Bad news:* Our current Maven build breaks when doing so.

This is what happens:

   1. maven-bundle-plugin version 2.3.x cannot parse JDK8 lambdas. [1]

   2. Upgrading it to the latest version (3.0.1) makes the plugin fail
miserably (at least on camel-core).

   3. Using the latest 2.x version of the maven-bundle-plugin (2.5.4) makes
the maven-shade-plugin fail with this error in turn:

[ERROR] The project main artifact does not exist. This could have the
following
[ERROR] reasons:
[ERROR] - You have invoked the goal directly from the command line. This is
not
[ERROR]   supported. Please add the goal to the default lifecycle via an
[ERROR]   <execution> element in your POM and use "mvn package" to have it
run.
[ERROR] - You have bound the goal to a lifecycle phase before "package".
Please
[ERROR]   remove this binding from your POM such that the goal will be run
in
[ERROR]   the proper phase.

   4. Upgrading the shade plugin doesn't help.

   5. The situation is dirty :P

The problem is the usage of the 'bundle' custom packaging type enabled by
extensions='true' in the maven-bundle-plugin.

*Good news again:*

We can avoid the problem by reverting back to the standard 'jar' packaging
type, which even puts us in a less brittle situation wrt. to future Maven
plugins we may want to add/upgrade. This implies:

   1. Calling the maven-bundle-plugin:manifest goal (instead of the bundle
goal) to only generate the MANIFEST.MF.

   2. Adding it to the JAR via an option in the the maven-jar-plugin:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>${maven-jar-plugin-version}</version>
        <configuration>
          <archive>

<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
      </plugin>

I've made the change. But since it's a big one, I didn't push to master but
to a branch for us to review first: jdk8-lambdas.

The build passes (yay!) but OSGi battle testing is a must to ensure there
are no regressions.

Could you have a quick look? If no feedback is received until Monday EOD,
I'll merge to master. If feedback is positive, we can merge earlier to
enable people to develop with lambdas finally.

---

Just in case you're not aware, the OSGi legend Neil Bartlett has just
released a new bnd-maven-plugin [2] that claims to overcome such
dysfunctions, as well as others, of the Felix plugin. He complained about
how the custom packaging type breaks integration with other plugins
downstream (what we're experiencing).

I see no reason to migrate to his bnd-maven-plugin, but we should keep it
in mind for the future.

[1] https://issues.apache.org/jira/browse/FELIX-4005
[2] http://njbartlett.name/2015/03/27/announcing-bnd-maven-plugin.html

Cheers,

*Raúl Kripalani*
PMC & Committer @ Apache Ignite, Apache Camel | Integration, Big Data and
Messaging Engineer
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
Blog: raul.io | twitter: @raulvk <https://twitter.com/raulvk>

Reply via email to