SlideShare a Scribd company logo
Maven, Eclipse and OSGi working together  Carlos Sanchez March 17, 2008
About me Member of Apache Maven PMC Committer at the Eclipse Foundation Director at Exist Global
Contents Maven in the Eclipse IDE Maven to OSGi Eclipse plugins to Maven Maven building Eclipse plugins Looking into the future Conclusions
Section 1 Maven in the Eclipse IDE
Maven in the IDE Q4E [Q for Eclipse] Proposed to the Eclipse Foundation as Eclipse IAM [Eclipse Integration for Apache Maven]
Maven in the IDE Other alternatives m2eclipse Maven Eclipse plugin [eclipse:eclipse]
Q4E Features running Maven goals from the IDE dependency managing using the POM & automatic download of dependencies Eclipse classpath synchronized with POM
Q4E Features direct import of Maven 2 projects wizard for creation of new projects using the archetype mechanism
Q4E Features modular approach to improve reusability by other Eclipse projects ability to import parent projects (pom projects)‏ ability to cancel Maven builds
Q4E dependency graphing
Q4E dependency analysis
Roadmap WTP support Integration with other plugins Scala, Candy for Appfuse, SpringIDE,... UI tooling to work around Maven limitations (common complains)‏ Excluding a dependency from the graphs will add all necessary <exclusions> to the pom
Q4E as example All examples in next sections are real-world examples from Q4E development https://q4e.googlecode.com/svn/branches/mavenbuild
Section 2 Maven to OSGi
Tools Bleeding edge!!! Apache Maven 2.0.9+ (includes bug fixes MNG-3396 and MNG-3410)‏ Apache Felix Bundle  Plugin 1.4.1+ Maven PDE plugin 1.0+ Maven Eclipse plugin 2.5+
Converting 3 rd  party Maven projects to OSGi Create a new Maven project Set <packaging> to  bundle Add maven-bundle-plugin Add dependencies to the 3 rd  party projects
Felix Maven Bundle plugin Maven philosophy: will use defaults for most of the configuration Manifest still completely customizable http://felix.apache.org/site/maven-bundle-plugin-bnd.html
Felix Maven Bundle plugin will scan your classes for exported/imported packages will not use Require-Bundle
Felix Maven Bundle plugin By default ${groupId}.${artifactId} packages get included, use Export-Packages to customize Export-Packages exports AND includes the classes in the bundle <_exportcontents> only exports
Felix Maven Bundle plugin inline=true to avoid embedding jars inside the bundle Needs to run after compilation
Converting 3 rd  party Maven projects to OSGi <packaging>bundle</packaging> [...] <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <!-- <version>1.4.0</version> defined in parent plugin management --> <extensions>true</extensions> <configuration> <instructions> <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency> <Embed-Transitive>false</Embed-Transitive> </instructions> </configuration> </plugin> </plugins>
Converting 3 rd  party Maven projects to OSGi Example plugins/thirdparty/org.apache.maven.shared.dependency.tree repackages < dependency > < groupId > org.apache.maven.shared </ groupId > < artifactId > maven-dependency-tree </ artifactId > < version > 1.1 </ version > </ dependency > as OSGi bundle
Dependency handling Customize the dependencies included by using <exclusions> <_exportcontents> <Export-Package> <Embed-Dependency> <Embed-Transitive>
Dependency handling Customize the dependencies imported and the versions by using Import-Package
Dependency handling: example plugins/maven/embedder/pom.xml Includes all dependencies in a lib folder inside the bundle Some dependencies are exchanged for prebuild OSGi bundles and depended upon Exports a few org.apache.maven and  org.codehaus.plexus packages only
Example < dependency > < groupId > org.apache.maven </ groupId > < artifactId > maven-embedder </ artifactId > < version > 2.1-SNAPSHOT </ version > < exclusions > <!-- we'll use eclipse bundles for these --> < exclusion > < groupId > com.jcraft </ groupId > < artifactId > jsch </ artifactId > </ exclusion > < exclusion > < groupId > aspectj </ groupId > < artifactId > aspectjrt </ artifactId > </ exclusion > [...] </ exclusions > </ dependency > [...] <!-- Eclipse bundles dependencies --> < dependency > < groupId > org.aspectj </ groupId > < artifactId > runtime </ artifactId > </ dependency > < dependency > < groupId > com.jcraft </ groupId > < artifactId > jsch </ artifactId > </ dependency >
Example: Bundle plugin config < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < configuration > < instructions > < _exportcontents > org.apache.maven.embedder.*;-noimport:=true, org.apache.maven.*;-noimport:=true, org.codehaus.plexus.util.xml.*;-noimport:=true, !org.codehaus.plexus.util.*, org.codehaus.plexus.*;-noimport:=true, </ _exportcontents > < Export-Package ></ Export-Package > < Import-Package > !junit.*, !sun.misc.*, org.apache.commons.cli;version=&quot;[1.0.0,2.0.0)&quot;, * </ Import-Package > <!-- we can't inline as the different plexus META-INF/plexus/components.xml will overwrite each other --> < Embed-Dependency > *;scope=compile|runtime;inline=false;artifactId=!cli|lang|runtime|tidy|jsch|commons-logging|jdom </ Embed-Dependency > < Embed-Directory > lib </ Embed-Directory > < Embed-Transitive > true </ Embed-Transitive > < Eclipse-BuddyPolicy > registered </ Eclipse-BuddyPolicy > < Include-Resource > LICENSE.txt,NOTICE.txt </ Include-Resource > </ instructions > </ configuration > </ plugin >
Converting your Maven projects to OSGi Felix Bundle Plugin again Generate the OSGi manifest No need to change packaging Same configuration options apply Configure the jar plugin to pick up the generated manifest
Converting your Maven projects to OSGi Using Apache Felix maven-bundle-plugin to generate the OSGi manifest <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive>  <manifestFile> ${project.build.outputDirectory}/META-INF/MANIFEST.MF </manifestFile> </archive>  </configuration> </plugin>  <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <executions> <execution> <phase>process-classes</phase> <goals> <goal>manifest</goal> </goals> </execution> </executions> </plugin>
Caveats Version ranges have differnet meanings in Maven and OSGi Bundles with nested jars wont work Private packages are visible
Version ranges in OSGi x.y.z.q > x.y.z org.eclipse.core.filebuffers 3.3.0 < 3.3.0-v20070606-0010 3.3.0-v20070606-0010  is  in [3.3,4.0)‏
Version ranges in Maven x.y.z.q < x.y.z x.y.z-q < x.y.z org.eclipse.core.filebuffers 3.3.0-v20070606-0010 < 3.3.0 3.3.0-v20070606-0010 is  not  in [3.3,4.0)‏
Version ranges in Maven History 1.0.0-SNAPSHOT = work in progress towards 1.0.0 1.0.0-SNAPSHOT becomes 1.0.0-20080301.101201-1 when deploying to the repository 1.0.0-SNAPSHOT < 1.0.0 then 1.0.0-20080301.1012 < 1.0.0
Version ranges in Maven Solving the problem, from Maven 2.0.9! use <dependencyManagement> to explicitly set the versions you want Do it in the parent POM and it's a one time setup
Caveats: version ranges < dependencyManagement > < dependencies > <!-- required for pde-maven-plugin due to problems with Maven and Eclipse version ranges --> < dependency > < groupId > org.eclipse </ groupId > < artifactId > osgi </ artifactId > < version > 3.3.0-v20070530 </ version > </ dependency > < dependency > < groupId > org.eclipse.ant </ groupId > < artifactId > core </ artifactId > < version > 3.1.200-v20070522 </ version > </ dependency > < dependency > < groupId > org.eclipse </ groupId > < artifactId > text </ artifactId > < version > 3.3.0-v20070606-0010 </ version > </ dependency > < dependency > < groupId > org.eclipse.core </ groupId > < artifactId > commands </ artifactId > < version > 3.3.0-I20070605-0010 </ version > </ dependency > < dependency > < groupId > org.eclipse.core </ groupId > < artifactId > filebuffers </ artifactId > < version > 3.3.0-v20070606-0010 </ version > </ dependency > [...]
Caveats: Nested jars in bundles The Sun compiler wont recognize them Maven provides a pluggable compiler infrastructure Unfortunately the Eclipse compiler implementation is not up to date http://maven.apache.org/plugins/maven-compiler-plugin/non-javac-compilers.html
Caveats: private packages are visible Same problem as with nested jars The Sun compiler doesn't honor OSGi manifests
Section 3 Eclipse plugins to Maven
Converting Eclipse plugins to Maven Maven Eclipse plugin 2.5+ eclipse:to-maven
Eclipse to Maven Automatic process, bidirectional Bundle-SymbolicName=x.y.z groupId=x.y / artifactId=z Bundle-Version=x.y.z.q version=x.y.z-q
from OSGi manifest Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Created-By: 1.4.2 (IBM Corporation)‏ Bundle-Name:  %PLUGIN_NAME Bundle-Vendor: %PLUGIN_PROVIDER Ant-Version: Apache Ant 1.7.0 Export-Package: org.eclipse.core.internal.net;x-internal:=true,org.ecl ipse.core.net.proxy Bundle-Version:  1.0.0.I20070531 Bundle-Activator: org.eclipse.core.internal.net.Activator Require-Bundle:  org.eclipse.core.runtime ;bundle-version=&quot; [3.3.0,4.0.0)‏ &quot; Eclipse-LazyStart: true Bundle-SymbolicName:  org.eclipse.core.net ;singleton:=true Bundle-RequiredExecutionEnvironment: J2SE-1.4,CDC-1.0/Foundation-1.0,J 2SE-1.3 Bundle-Localization: plugin plugin.properties PLUGIN_NAME = Internet Connection Management PLUGIN_PROVIDER=Eclipse.org
to Maven POM <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <project> <modelVersion>4.0.0</modelVersion> <groupId> org.eclipse.core </groupId> <artifactId> net </artifactId> <name>Internet Connection Management</name> <version> 1.0.0-I20070531 </version> <licenses> <license> <name>Eclipse Public License - v 1.0</name> <url>http://www.eclipse.org/org/documents/epl-v10.html</url> </license> </licenses> <dependencies> <dependency> <groupId> org.eclipse.core </groupId> <artifactId> runtime </artifactId> <version> [3.3.0,4.0.0) </version> </dependency> </dependencies> </project>
Eclipse to Maven: Caveats Handling fragments anything special to do? Short names for artifactIds not a problem in the repository in a flat folder the Maven plugins should automatically rename to groupId.artifactId
Section 4 Maven building Eclipse plugins
Maven building Eclipse plugins OSGi bundles + extra manifest values (configurable in the Felix Bundle Plugin)‏ + Features + Update sites
Integrating with PDE Felix Bundle Plugin generate the manifest in ${basedir}/META-INF Jar plugin use  ${basedir}/META-INF  as manifest source
Integrating with PDE Dependency plugin copy dependencies to local folder binaries to  ${basedir}/lib sources to  ${basedir}/src Need to be added to Eclipse classpath by hand
Integrating with PDE example plugins/pom.xml plugins/maven/embedder/pom.xml Profile  eclipse-dev mvn -Peclipse-dev package
plugins/pom.xml < plugin > < groupId > org.apache.maven.plugins </ groupId > < artifactId > maven-dependency-plugin </ artifactId > < executions > < execution > < id > copy-dependencies </ id > < phase > package </ phase > < goals > < goal > copy-dependencies </ goal > </ goals > < configuration > < outputDirectory > ${libdir} </ outputDirectory > </ configuration > </ execution > < execution > < id > copy-src-dependencies </ id > < phase > package </ phase > < goals > < goal > copy-dependencies </ goal > </ goals > < configuration > < classifier > sources </ classifier > < failOnMissingClassifierArtifact > false </ failOnMissingClassifierArtifact > < outputDirectory > ${srcdir} </ outputDirectory > </ configuration > </ execution > </ executions > </ plugin >
plugins/pom.xml < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < extensions > true </ extensions > < configuration > < manifestLocation > ${basedir}/META-INF </ manifestLocation > < instructions > < Embed-Dependency > *;scope=compile|runtime;inline=true </ Embed-Dependency > < Embed-Transitive > false </ Embed-Transitive > </ instructions > </ configuration > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > manifest </ goal > </ goals > </ execution > </ executions > </ plugin >
Maven building features Add pde-maven-plugin, enable extensions Set packaging to eclipse-feature license must be present Generates feature.xml and feature.properties Integrates with PDE by generating the files in the root folder
Feature example Add a dependency to previously  generated bundle org.apache.maven.embedder Exclude dependencies that are already packaged in the bundle
Feature example features/pom.xml < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < extensions > true </ extensions > </ plugin > [...] < profiles > < profile > < id > eclipse-dev </ id > < build > < plugins > < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < configuration > < outputDirectory > ${basedir} </ outputDirectory > </ configuration > </ plugin > </ plugins > </ build > </ profile > </ profiles >
Feature example features/org.apache.maven.feature < packaging > eclipse-feature </ packaging > < name > Apache Maven </ name > < description > Eclipse Feature for Apache Maven </ description > < licenses > < license > < name > The Apache Software License, Version 2.0 </ name > < url > http://www.apache.org/licenses/LICENSE-2.0.txt </ url > < distribution > repo </ distribution > </ license > </ licenses > < organization > < name > The Apache Software Foundation </ name > < url > http://www.apache.org/ </ url > </ organization > < url > http://www.apache.org/ </ url > < dependencies > < dependency > < groupId > org.apache.maven </ groupId > < artifactId > embedder </ artifactId > < exclusions > < exclusion > < groupId > org.apache.maven </ groupId > < artifactId > maven-embedder </ artifactId > </ exclusion > </ exclusions > </ dependency > </ dependencies >
Feature example: result <feature id= &quot;org.apache.maven.feature&quot; label= &quot;%featureName&quot; version= &quot;2.1.0.632696&quot; provider-name= &quot;%providerName&quot; > <description> %description </description> <copyright> %copyright </copyright> <license   url= &quot;%licenseURL&quot; > %license </license> <plugin   id= &quot;org.apache.maven.embedder&quot;   download-size= &quot;2262&quot;   install-size= &quot;2262&quot; version= &quot;2.1.0.632696&quot;  unpack= &quot;false&quot; /> <plugin   id= &quot;org.apache.commons.cli&quot;   download-size= &quot;31&quot;   install-size= &quot;31&quot; version= &quot;1.0.0.v200709131616&quot;   unpack= &quot;false&quot; /> <plugin   id= &quot;org.apache.commons.lang&quot;   download-size= &quot;206&quot;   install-size= &quot;206&quot; version= &quot;2.1.0.v200709131643&quot;   unpack= &quot;false&quot; /> <plugin   id= &quot;org.aspectj.runtime&quot;   download-size= &quot;95&quot;   install-size= &quot;95&quot; version= &quot;1.5.4.200705211336&quot;   unpack= &quot;false&quot; /> [...]
Feature example: feature.properties # #Tue Mar 04 11:35:43 PST 2008 featureName= Apache   Maven copyright= Copyright   DevZuz   http\ : //www.devzuz.org licenseURL= http\ : //www.eclipse.org/org/documents/epl-v10.html license= Eclipse   Public   License   -   v   1.0 description= Eclipse   Feature   for   Apache   Maven providerName= DevZuz
Maven building update sites Add dependencies to the features you want to include dependency type is eclipse-feature To generate the site.xml and copy the features Add pde-maven-plugin Add the update-site goal to the execution
Maven building update sites To copy all the bundles Add Felix bundle plugin Add the bundleall goal to the execution it will process all dependencies, dependencies' dependencies and so on
Maven building update sites Set ignoreMissingArtifacts to true From 1.4.1 you can limit the depth, depth=2 will do the trick For integration with PDE, generate the files in the root dir
Maven building update sites Example updatesite-dev/pom.xml Has two features and its bundles org.apache.maven.feature org.devzuz.q.feature.thirdparty
Update Site example < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > update-site </ goal > </ goals > </ execution > </ executions > </ plugin > < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > bundleall </ goal > </ goals > </ execution > </ executions > < configuration > < depth > 2 </ depth > < ignoreMissingArtifacts > true </ ignoreMissingArtifacts > < outputDirectory > ${project.build.directory}/site/plugins </ outputDirectory > </ configuration > </ plugin > </ plugins > </ build >
Update Site example < dependencies > < dependency > < groupId > org.apache.maven </ groupId > < artifactId > feature </ artifactId > < version > 2.1.0-632695 </ version > < type > eclipse-feature </ type > </ dependency > < dependency > < groupId > org.devzuz.q.feature </ groupId > < artifactId > thirdparty </ artifactId > < version > 0.5.0.200803040914 </ version > < type > eclipse-feature </ type > </ dependency > </ dependencies >
Update Site caveats Features must have a license, make sure you have one in your feature pom.xml Eclipse update site manager will not give any detail if there are errors in features or update site
Section 5 Looking into the future
Equinox provisioning [p2] Forget about features and update sites Installable Units new metadata format external to he bundle looks like a Maven POM? wait...
Artifact Repository For OSGi bundles sounds familiar? It could be a Maven repository
When did you say? Initial implementation in Eclipse 3.4 More to come in 4.0
Conclusions Not ready for production but it will never be if people don't try it Although it can already alleviate some pain
Conclusions Make your Maven projects be OSGi bundles at the source if you are going to need them later Start generating manifests and committing them to work with both Maven and PDE
Conclusions All the plugin versions used in the examples to be released soon
Homework If you have free time and want to contribute...
Eclipse compiler You can configure Maven to use the Eclipse compiler and take full advantage of its OSGi support http://maven.apache.org/plugins/maven-compiler-plugin/non-javac-compilers.html The code http://svn.codehaus.org/plexus/plexus-components/trunk/plexus-compiler/plexus-compilers/plexus-compiler-eclipse/ Issue tracker http://jira.codehaus.org/browse/PLXCOMP
Thanks [email_address] http://www.carlossanchez.eu
Ad

More Related Content

What's hot (20)

Springboot and camel
Springboot and camelSpringboot and camel
Springboot and camel
Deepak Kumar
 
Spring boot
Spring bootSpring boot
Spring boot
sdeeg
 
Grails Spring Boot
Grails Spring BootGrails Spring Boot
Grails Spring Boot
TO THE NEW | Technology
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Fátima Casaú Pérez
 
Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!
🎤 Hanno Embregts 🎸
 
Os Johnson
Os JohnsonOs Johnson
Os Johnson
oscon2007
 
When Web meet Native App
When Web meet Native AppWhen Web meet Native App
When Web meet Native App
Yu-Wei Chuang
 
Spring Boot
Spring BootSpring Boot
Spring Boot
HongSeong Jeon
 
Spring Boot
Spring BootSpring Boot
Spring Boot
koppenolski
 
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Matt Raible
 
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Matt Raible
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
Top 8 Ruby on Rails Gems
Top 8 Ruby on Rails GemsTop 8 Ruby on Rails Gems
Top 8 Ruby on Rails Gems
Tiago E.M. Martins
 
Spring Boot Intro
Spring Boot IntroSpring Boot Intro
Spring Boot Intro
Alberto Flores
 
Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)
Chinmoy Mohanty
 
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Matt Raible
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
 
Xke spring boot
Xke spring bootXke spring boot
Xke spring boot
sourabh aggarwal
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburg
simonscholz
 
Springboot and camel
Springboot and camelSpringboot and camel
Springboot and camel
Deepak Kumar
 
Spring boot
Spring bootSpring boot
Spring boot
sdeeg
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Fátima Casaú Pérez
 
Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!
🎤 Hanno Embregts 🎸
 
When Web meet Native App
When Web meet Native AppWhen Web meet Native App
When Web meet Native App
Yu-Wei Chuang
 
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Matt Raible
 
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Matt Raible
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)
Chinmoy Mohanty
 
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Matt Raible
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburg
simonscholz
 

Similar to Maven, Eclipse And OSGi Working Together (20)

Using Maven2
Using Maven2Using Maven2
Using Maven2
elliando dias
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
Arnaud Héritier
 
Maven 2.0 - Improve your build patterns
Maven 2.0 - Improve your build patternsMaven 2.0 - Improve your build patterns
Maven 2.0 - Improve your build patterns
elliando dias
 
Introduction To Eclipse RCP
Introduction To Eclipse RCPIntroduction To Eclipse RCP
Introduction To Eclipse RCP
whbath
 
Slim3 quick start
Slim3 quick startSlim3 quick start
Slim3 quick start
Guangyao Cao
 
Maven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolMaven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension tool
elliando dias
 
Maven
MavenMaven
Maven
ravireddy76
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Thorsten Kamann
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
chrisb206 chrisb206
 
Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007
Daniel Fagerstrom
 
Maven
MavenMaven
Maven
Fabio Bonfante
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
mrdon
 
WSGI, Repoze, Deliverence
WSGI, Repoze, DeliverenceWSGI, Repoze, Deliverence
WSGI, Repoze, Deliverence
Quintagroup
 
Maven
MavenMaven
Maven
feng lee
 
Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
Ryan Baxter
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
marpierc
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven Methods
Andrew Savory
 
CQ Maven Methods
CQ Maven MethodsCQ Maven Methods
CQ Maven Methods
connectwebex
 
CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2
CodeIgniter Conference
 
Tips & Tricks for Maven Tycho
Tips & Tricks for Maven TychoTips & Tricks for Maven Tycho
Tips & Tricks for Maven Tycho
Gunnar Wagenknecht
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
Arnaud Héritier
 
Maven 2.0 - Improve your build patterns
Maven 2.0 - Improve your build patternsMaven 2.0 - Improve your build patterns
Maven 2.0 - Improve your build patterns
elliando dias
 
Introduction To Eclipse RCP
Introduction To Eclipse RCPIntroduction To Eclipse RCP
Introduction To Eclipse RCP
whbath
 
Maven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolMaven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension tool
elliando dias
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Thorsten Kamann
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
chrisb206 chrisb206
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
mrdon
 
WSGI, Repoze, Deliverence
WSGI, Repoze, DeliverenceWSGI, Repoze, Deliverence
WSGI, Repoze, Deliverence
Quintagroup
 
Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
Ryan Baxter
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
marpierc
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven Methods
Andrew Savory
 
CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2
CodeIgniter Conference
 
Ad

More from Carlos Sanchez (20)

Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Carlos Sanchez
 
Using Kubernetes for Continuous Integration and Continuous Delivery
Using Kubernetes for Continuous Integration and Continuous DeliveryUsing Kubernetes for Continuous Integration and Continuous Delivery
Using Kubernetes for Continuous Integration and Continuous Delivery
Carlos Sanchez
 
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-ServicesDivide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Carlos Sanchez
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Carlos Sanchez
 
Using Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous DeliveryUsing Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous Delivery
Carlos Sanchez
 
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-ServicesDivide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Carlos Sanchez
 
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Carlos Sanchez
 
Testing Distributed Micro Services. Agile Testing Days 2017
Testing Distributed Micro Services. Agile Testing Days 2017Testing Distributed Micro Services. Agile Testing Days 2017
Testing Distributed Micro Services. Agile Testing Days 2017
Carlos Sanchez
 
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache MesosCI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
Carlos Sanchez
 
From Monolith to Docker Distributed Applications
From Monolith to Docker Distributed ApplicationsFrom Monolith to Docker Distributed Applications
From Monolith to Docker Distributed Applications
Carlos Sanchez
 
From Monolith to Docker Distributed Applications. JavaOne
From Monolith to Docker Distributed Applications. JavaOneFrom Monolith to Docker Distributed Applications. JavaOne
From Monolith to Docker Distributed Applications. JavaOne
Carlos Sanchez
 
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Carlos Sanchez
 
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache MesosCI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
Carlos Sanchez
 
From Monolith to Docker Distributed Applications
From Monolith to Docker Distributed ApplicationsFrom Monolith to Docker Distributed Applications
From Monolith to Docker Distributed Applications
Carlos Sanchez
 
Scaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and KubernetesScaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and Kubernetes
Carlos Sanchez
 
Using Docker for Testing
Using Docker for TestingUsing Docker for Testing
Using Docker for Testing
Carlos Sanchez
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with Kubernetes
Carlos Sanchez
 
Scaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and KubernetesScaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and Kubernetes
Carlos Sanchez
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with Kubernetes
Carlos Sanchez
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
Carlos Sanchez
 
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Carlos Sanchez
 
Using Kubernetes for Continuous Integration and Continuous Delivery
Using Kubernetes for Continuous Integration and Continuous DeliveryUsing Kubernetes for Continuous Integration and Continuous Delivery
Using Kubernetes for Continuous Integration and Continuous Delivery
Carlos Sanchez
 
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-ServicesDivide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Carlos Sanchez
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Carlos Sanchez
 
Using Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous DeliveryUsing Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous Delivery
Carlos Sanchez
 
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-ServicesDivide and Conquer: Easier Continuous Delivery using Micro-Services
Divide and Conquer: Easier Continuous Delivery using Micro-Services
Carlos Sanchez
 
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Carlos Sanchez
 
Testing Distributed Micro Services. Agile Testing Days 2017
Testing Distributed Micro Services. Agile Testing Days 2017Testing Distributed Micro Services. Agile Testing Days 2017
Testing Distributed Micro Services. Agile Testing Days 2017
Carlos Sanchez
 
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache MesosCI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
Carlos Sanchez
 
From Monolith to Docker Distributed Applications
From Monolith to Docker Distributed ApplicationsFrom Monolith to Docker Distributed Applications
From Monolith to Docker Distributed Applications
Carlos Sanchez
 
From Monolith to Docker Distributed Applications. JavaOne
From Monolith to Docker Distributed Applications. JavaOneFrom Monolith to Docker Distributed Applications. JavaOne
From Monolith to Docker Distributed Applications. JavaOne
Carlos Sanchez
 
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Carlos Sanchez
 
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache MesosCI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos
Carlos Sanchez
 
From Monolith to Docker Distributed Applications
From Monolith to Docker Distributed ApplicationsFrom Monolith to Docker Distributed Applications
From Monolith to Docker Distributed Applications
Carlos Sanchez
 
Scaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and KubernetesScaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and Kubernetes
Carlos Sanchez
 
Using Docker for Testing
Using Docker for TestingUsing Docker for Testing
Using Docker for Testing
Carlos Sanchez
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with Kubernetes
Carlos Sanchez
 
Scaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and KubernetesScaling Jenkins with Docker and Kubernetes
Scaling Jenkins with Docker and Kubernetes
Carlos Sanchez
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with Kubernetes
Carlos Sanchez
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
Carlos Sanchez
 
Ad

Recently uploaded (20)

How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 

Maven, Eclipse And OSGi Working Together

  • 1. Maven, Eclipse and OSGi working together Carlos Sanchez March 17, 2008
  • 2. About me Member of Apache Maven PMC Committer at the Eclipse Foundation Director at Exist Global
  • 3. Contents Maven in the Eclipse IDE Maven to OSGi Eclipse plugins to Maven Maven building Eclipse plugins Looking into the future Conclusions
  • 4. Section 1 Maven in the Eclipse IDE
  • 5. Maven in the IDE Q4E [Q for Eclipse] Proposed to the Eclipse Foundation as Eclipse IAM [Eclipse Integration for Apache Maven]
  • 6. Maven in the IDE Other alternatives m2eclipse Maven Eclipse plugin [eclipse:eclipse]
  • 7. Q4E Features running Maven goals from the IDE dependency managing using the POM & automatic download of dependencies Eclipse classpath synchronized with POM
  • 8. Q4E Features direct import of Maven 2 projects wizard for creation of new projects using the archetype mechanism
  • 9. Q4E Features modular approach to improve reusability by other Eclipse projects ability to import parent projects (pom projects)‏ ability to cancel Maven builds
  • 12. Roadmap WTP support Integration with other plugins Scala, Candy for Appfuse, SpringIDE,... UI tooling to work around Maven limitations (common complains)‏ Excluding a dependency from the graphs will add all necessary <exclusions> to the pom
  • 13. Q4E as example All examples in next sections are real-world examples from Q4E development https://q4e.googlecode.com/svn/branches/mavenbuild
  • 14. Section 2 Maven to OSGi
  • 15. Tools Bleeding edge!!! Apache Maven 2.0.9+ (includes bug fixes MNG-3396 and MNG-3410)‏ Apache Felix Bundle Plugin 1.4.1+ Maven PDE plugin 1.0+ Maven Eclipse plugin 2.5+
  • 16. Converting 3 rd party Maven projects to OSGi Create a new Maven project Set <packaging> to bundle Add maven-bundle-plugin Add dependencies to the 3 rd party projects
  • 17. Felix Maven Bundle plugin Maven philosophy: will use defaults for most of the configuration Manifest still completely customizable http://felix.apache.org/site/maven-bundle-plugin-bnd.html
  • 18. Felix Maven Bundle plugin will scan your classes for exported/imported packages will not use Require-Bundle
  • 19. Felix Maven Bundle plugin By default ${groupId}.${artifactId} packages get included, use Export-Packages to customize Export-Packages exports AND includes the classes in the bundle <_exportcontents> only exports
  • 20. Felix Maven Bundle plugin inline=true to avoid embedding jars inside the bundle Needs to run after compilation
  • 21. Converting 3 rd party Maven projects to OSGi <packaging>bundle</packaging> [...] <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <!-- <version>1.4.0</version> defined in parent plugin management --> <extensions>true</extensions> <configuration> <instructions> <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency> <Embed-Transitive>false</Embed-Transitive> </instructions> </configuration> </plugin> </plugins>
  • 22. Converting 3 rd party Maven projects to OSGi Example plugins/thirdparty/org.apache.maven.shared.dependency.tree repackages < dependency > < groupId > org.apache.maven.shared </ groupId > < artifactId > maven-dependency-tree </ artifactId > < version > 1.1 </ version > </ dependency > as OSGi bundle
  • 23. Dependency handling Customize the dependencies included by using <exclusions> <_exportcontents> <Export-Package> <Embed-Dependency> <Embed-Transitive>
  • 24. Dependency handling Customize the dependencies imported and the versions by using Import-Package
  • 25. Dependency handling: example plugins/maven/embedder/pom.xml Includes all dependencies in a lib folder inside the bundle Some dependencies are exchanged for prebuild OSGi bundles and depended upon Exports a few org.apache.maven and org.codehaus.plexus packages only
  • 26. Example < dependency > < groupId > org.apache.maven </ groupId > < artifactId > maven-embedder </ artifactId > < version > 2.1-SNAPSHOT </ version > < exclusions > <!-- we'll use eclipse bundles for these --> < exclusion > < groupId > com.jcraft </ groupId > < artifactId > jsch </ artifactId > </ exclusion > < exclusion > < groupId > aspectj </ groupId > < artifactId > aspectjrt </ artifactId > </ exclusion > [...] </ exclusions > </ dependency > [...] <!-- Eclipse bundles dependencies --> < dependency > < groupId > org.aspectj </ groupId > < artifactId > runtime </ artifactId > </ dependency > < dependency > < groupId > com.jcraft </ groupId > < artifactId > jsch </ artifactId > </ dependency >
  • 27. Example: Bundle plugin config < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < configuration > < instructions > < _exportcontents > org.apache.maven.embedder.*;-noimport:=true, org.apache.maven.*;-noimport:=true, org.codehaus.plexus.util.xml.*;-noimport:=true, !org.codehaus.plexus.util.*, org.codehaus.plexus.*;-noimport:=true, </ _exportcontents > < Export-Package ></ Export-Package > < Import-Package > !junit.*, !sun.misc.*, org.apache.commons.cli;version=&quot;[1.0.0,2.0.0)&quot;, * </ Import-Package > <!-- we can't inline as the different plexus META-INF/plexus/components.xml will overwrite each other --> < Embed-Dependency > *;scope=compile|runtime;inline=false;artifactId=!cli|lang|runtime|tidy|jsch|commons-logging|jdom </ Embed-Dependency > < Embed-Directory > lib </ Embed-Directory > < Embed-Transitive > true </ Embed-Transitive > < Eclipse-BuddyPolicy > registered </ Eclipse-BuddyPolicy > < Include-Resource > LICENSE.txt,NOTICE.txt </ Include-Resource > </ instructions > </ configuration > </ plugin >
  • 28. Converting your Maven projects to OSGi Felix Bundle Plugin again Generate the OSGi manifest No need to change packaging Same configuration options apply Configure the jar plugin to pick up the generated manifest
  • 29. Converting your Maven projects to OSGi Using Apache Felix maven-bundle-plugin to generate the OSGi manifest <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestFile> ${project.build.outputDirectory}/META-INF/MANIFEST.MF </manifestFile> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <executions> <execution> <phase>process-classes</phase> <goals> <goal>manifest</goal> </goals> </execution> </executions> </plugin>
  • 30. Caveats Version ranges have differnet meanings in Maven and OSGi Bundles with nested jars wont work Private packages are visible
  • 31. Version ranges in OSGi x.y.z.q > x.y.z org.eclipse.core.filebuffers 3.3.0 < 3.3.0-v20070606-0010 3.3.0-v20070606-0010 is in [3.3,4.0)‏
  • 32. Version ranges in Maven x.y.z.q < x.y.z x.y.z-q < x.y.z org.eclipse.core.filebuffers 3.3.0-v20070606-0010 < 3.3.0 3.3.0-v20070606-0010 is not in [3.3,4.0)‏
  • 33. Version ranges in Maven History 1.0.0-SNAPSHOT = work in progress towards 1.0.0 1.0.0-SNAPSHOT becomes 1.0.0-20080301.101201-1 when deploying to the repository 1.0.0-SNAPSHOT < 1.0.0 then 1.0.0-20080301.1012 < 1.0.0
  • 34. Version ranges in Maven Solving the problem, from Maven 2.0.9! use <dependencyManagement> to explicitly set the versions you want Do it in the parent POM and it's a one time setup
  • 35. Caveats: version ranges < dependencyManagement > < dependencies > <!-- required for pde-maven-plugin due to problems with Maven and Eclipse version ranges --> < dependency > < groupId > org.eclipse </ groupId > < artifactId > osgi </ artifactId > < version > 3.3.0-v20070530 </ version > </ dependency > < dependency > < groupId > org.eclipse.ant </ groupId > < artifactId > core </ artifactId > < version > 3.1.200-v20070522 </ version > </ dependency > < dependency > < groupId > org.eclipse </ groupId > < artifactId > text </ artifactId > < version > 3.3.0-v20070606-0010 </ version > </ dependency > < dependency > < groupId > org.eclipse.core </ groupId > < artifactId > commands </ artifactId > < version > 3.3.0-I20070605-0010 </ version > </ dependency > < dependency > < groupId > org.eclipse.core </ groupId > < artifactId > filebuffers </ artifactId > < version > 3.3.0-v20070606-0010 </ version > </ dependency > [...]
  • 36. Caveats: Nested jars in bundles The Sun compiler wont recognize them Maven provides a pluggable compiler infrastructure Unfortunately the Eclipse compiler implementation is not up to date http://maven.apache.org/plugins/maven-compiler-plugin/non-javac-compilers.html
  • 37. Caveats: private packages are visible Same problem as with nested jars The Sun compiler doesn't honor OSGi manifests
  • 38. Section 3 Eclipse plugins to Maven
  • 39. Converting Eclipse plugins to Maven Maven Eclipse plugin 2.5+ eclipse:to-maven
  • 40. Eclipse to Maven Automatic process, bidirectional Bundle-SymbolicName=x.y.z groupId=x.y / artifactId=z Bundle-Version=x.y.z.q version=x.y.z-q
  • 41. from OSGi manifest Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Created-By: 1.4.2 (IBM Corporation)‏ Bundle-Name: %PLUGIN_NAME Bundle-Vendor: %PLUGIN_PROVIDER Ant-Version: Apache Ant 1.7.0 Export-Package: org.eclipse.core.internal.net;x-internal:=true,org.ecl ipse.core.net.proxy Bundle-Version: 1.0.0.I20070531 Bundle-Activator: org.eclipse.core.internal.net.Activator Require-Bundle: org.eclipse.core.runtime ;bundle-version=&quot; [3.3.0,4.0.0)‏ &quot; Eclipse-LazyStart: true Bundle-SymbolicName: org.eclipse.core.net ;singleton:=true Bundle-RequiredExecutionEnvironment: J2SE-1.4,CDC-1.0/Foundation-1.0,J 2SE-1.3 Bundle-Localization: plugin plugin.properties PLUGIN_NAME = Internet Connection Management PLUGIN_PROVIDER=Eclipse.org
  • 42. to Maven POM <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <project> <modelVersion>4.0.0</modelVersion> <groupId> org.eclipse.core </groupId> <artifactId> net </artifactId> <name>Internet Connection Management</name> <version> 1.0.0-I20070531 </version> <licenses> <license> <name>Eclipse Public License - v 1.0</name> <url>http://www.eclipse.org/org/documents/epl-v10.html</url> </license> </licenses> <dependencies> <dependency> <groupId> org.eclipse.core </groupId> <artifactId> runtime </artifactId> <version> [3.3.0,4.0.0) </version> </dependency> </dependencies> </project>
  • 43. Eclipse to Maven: Caveats Handling fragments anything special to do? Short names for artifactIds not a problem in the repository in a flat folder the Maven plugins should automatically rename to groupId.artifactId
  • 44. Section 4 Maven building Eclipse plugins
  • 45. Maven building Eclipse plugins OSGi bundles + extra manifest values (configurable in the Felix Bundle Plugin)‏ + Features + Update sites
  • 46. Integrating with PDE Felix Bundle Plugin generate the manifest in ${basedir}/META-INF Jar plugin use ${basedir}/META-INF as manifest source
  • 47. Integrating with PDE Dependency plugin copy dependencies to local folder binaries to ${basedir}/lib sources to ${basedir}/src Need to be added to Eclipse classpath by hand
  • 48. Integrating with PDE example plugins/pom.xml plugins/maven/embedder/pom.xml Profile eclipse-dev mvn -Peclipse-dev package
  • 49. plugins/pom.xml < plugin > < groupId > org.apache.maven.plugins </ groupId > < artifactId > maven-dependency-plugin </ artifactId > < executions > < execution > < id > copy-dependencies </ id > < phase > package </ phase > < goals > < goal > copy-dependencies </ goal > </ goals > < configuration > < outputDirectory > ${libdir} </ outputDirectory > </ configuration > </ execution > < execution > < id > copy-src-dependencies </ id > < phase > package </ phase > < goals > < goal > copy-dependencies </ goal > </ goals > < configuration > < classifier > sources </ classifier > < failOnMissingClassifierArtifact > false </ failOnMissingClassifierArtifact > < outputDirectory > ${srcdir} </ outputDirectory > </ configuration > </ execution > </ executions > </ plugin >
  • 50. plugins/pom.xml < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < extensions > true </ extensions > < configuration > < manifestLocation > ${basedir}/META-INF </ manifestLocation > < instructions > < Embed-Dependency > *;scope=compile|runtime;inline=true </ Embed-Dependency > < Embed-Transitive > false </ Embed-Transitive > </ instructions > </ configuration > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > manifest </ goal > </ goals > </ execution > </ executions > </ plugin >
  • 51. Maven building features Add pde-maven-plugin, enable extensions Set packaging to eclipse-feature license must be present Generates feature.xml and feature.properties Integrates with PDE by generating the files in the root folder
  • 52. Feature example Add a dependency to previously generated bundle org.apache.maven.embedder Exclude dependencies that are already packaged in the bundle
  • 53. Feature example features/pom.xml < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < extensions > true </ extensions > </ plugin > [...] < profiles > < profile > < id > eclipse-dev </ id > < build > < plugins > < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < configuration > < outputDirectory > ${basedir} </ outputDirectory > </ configuration > </ plugin > </ plugins > </ build > </ profile > </ profiles >
  • 54. Feature example features/org.apache.maven.feature < packaging > eclipse-feature </ packaging > < name > Apache Maven </ name > < description > Eclipse Feature for Apache Maven </ description > < licenses > < license > < name > The Apache Software License, Version 2.0 </ name > < url > http://www.apache.org/licenses/LICENSE-2.0.txt </ url > < distribution > repo </ distribution > </ license > </ licenses > < organization > < name > The Apache Software Foundation </ name > < url > http://www.apache.org/ </ url > </ organization > < url > http://www.apache.org/ </ url > < dependencies > < dependency > < groupId > org.apache.maven </ groupId > < artifactId > embedder </ artifactId > < exclusions > < exclusion > < groupId > org.apache.maven </ groupId > < artifactId > maven-embedder </ artifactId > </ exclusion > </ exclusions > </ dependency > </ dependencies >
  • 55. Feature example: result <feature id= &quot;org.apache.maven.feature&quot; label= &quot;%featureName&quot; version= &quot;2.1.0.632696&quot; provider-name= &quot;%providerName&quot; > <description> %description </description> <copyright> %copyright </copyright> <license url= &quot;%licenseURL&quot; > %license </license> <plugin id= &quot;org.apache.maven.embedder&quot; download-size= &quot;2262&quot; install-size= &quot;2262&quot; version= &quot;2.1.0.632696&quot; unpack= &quot;false&quot; /> <plugin id= &quot;org.apache.commons.cli&quot; download-size= &quot;31&quot; install-size= &quot;31&quot; version= &quot;1.0.0.v200709131616&quot; unpack= &quot;false&quot; /> <plugin id= &quot;org.apache.commons.lang&quot; download-size= &quot;206&quot; install-size= &quot;206&quot; version= &quot;2.1.0.v200709131643&quot; unpack= &quot;false&quot; /> <plugin id= &quot;org.aspectj.runtime&quot; download-size= &quot;95&quot; install-size= &quot;95&quot; version= &quot;1.5.4.200705211336&quot; unpack= &quot;false&quot; /> [...]
  • 56. Feature example: feature.properties # #Tue Mar 04 11:35:43 PST 2008 featureName= Apache Maven copyright= Copyright DevZuz http\ : //www.devzuz.org licenseURL= http\ : //www.eclipse.org/org/documents/epl-v10.html license= Eclipse Public License - v 1.0 description= Eclipse Feature for Apache Maven providerName= DevZuz
  • 57. Maven building update sites Add dependencies to the features you want to include dependency type is eclipse-feature To generate the site.xml and copy the features Add pde-maven-plugin Add the update-site goal to the execution
  • 58. Maven building update sites To copy all the bundles Add Felix bundle plugin Add the bundleall goal to the execution it will process all dependencies, dependencies' dependencies and so on
  • 59. Maven building update sites Set ignoreMissingArtifacts to true From 1.4.1 you can limit the depth, depth=2 will do the trick For integration with PDE, generate the files in the root dir
  • 60. Maven building update sites Example updatesite-dev/pom.xml Has two features and its bundles org.apache.maven.feature org.devzuz.q.feature.thirdparty
  • 61. Update Site example < plugin > < groupId > org.codehaus.mojo </ groupId > < artifactId > pde-maven-plugin </ artifactId > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > update-site </ goal > </ goals > </ execution > </ executions > </ plugin > < plugin > < groupId > org.apache.felix </ groupId > < artifactId > maven-bundle-plugin </ artifactId > < executions > < execution > < phase > process-classes </ phase > < goals > < goal > bundleall </ goal > </ goals > </ execution > </ executions > < configuration > < depth > 2 </ depth > < ignoreMissingArtifacts > true </ ignoreMissingArtifacts > < outputDirectory > ${project.build.directory}/site/plugins </ outputDirectory > </ configuration > </ plugin > </ plugins > </ build >
  • 62. Update Site example < dependencies > < dependency > < groupId > org.apache.maven </ groupId > < artifactId > feature </ artifactId > < version > 2.1.0-632695 </ version > < type > eclipse-feature </ type > </ dependency > < dependency > < groupId > org.devzuz.q.feature </ groupId > < artifactId > thirdparty </ artifactId > < version > 0.5.0.200803040914 </ version > < type > eclipse-feature </ type > </ dependency > </ dependencies >
  • 63. Update Site caveats Features must have a license, make sure you have one in your feature pom.xml Eclipse update site manager will not give any detail if there are errors in features or update site
  • 64. Section 5 Looking into the future
  • 65. Equinox provisioning [p2] Forget about features and update sites Installable Units new metadata format external to he bundle looks like a Maven POM? wait...
  • 66. Artifact Repository For OSGi bundles sounds familiar? It could be a Maven repository
  • 67. When did you say? Initial implementation in Eclipse 3.4 More to come in 4.0
  • 68. Conclusions Not ready for production but it will never be if people don't try it Although it can already alleviate some pain
  • 69. Conclusions Make your Maven projects be OSGi bundles at the source if you are going to need them later Start generating manifests and committing them to work with both Maven and PDE
  • 70. Conclusions All the plugin versions used in the examples to be released soon
  • 71. Homework If you have free time and want to contribute...
  • 72. Eclipse compiler You can configure Maven to use the Eclipse compiler and take full advantage of its OSGi support http://maven.apache.org/plugins/maven-compiler-plugin/non-javac-compilers.html The code http://svn.codehaus.org/plexus/plexus-components/trunk/plexus-compiler/plexus-compilers/plexus-compiler-eclipse/ Issue tracker http://jira.codehaus.org/browse/PLXCOMP