	------
	Using the Object Teams Parent POM
	------
	Olaf Otto & Stephan Herrmann
	------
	2012-10-30
	------

Using the Object Teams Parent POM

 Declaring this module as the parent of your project will add basic capabilities
 for using OT/J in your sources.
 
* Include the parent pom

 For simple cases two declarations in your pom will suffice:

 [[1]] declare the maven repository for fetching Object Teams related modules

+-----
	<repositories>
		<repository>
			<id>ObjectTeamsRepository</id>
			<name>Object Teams Repository</name>
			<url>http://download.eclipse.org/objectteams/maven/3/repository</url>
		</repository>
	</repositories>
+----- 

 [[1]] declare the parent pom

+-----
	<parent>
		<groupId>org.eclipse</groupId>
		<artifactId>objectteams-parent-pom</artifactId>
		<version>2.1.1</version>
	</parent>
+-----

 Starting with version 2.1.1 the parent pom also supports using OT/J in tycho builds (projects using OSGi).

* Example

  See the {{{../objectteams-compile-test}objectteams-compile-test}} project for an example of how to use this parent pom.
  
* Under the hood
 
** Standard OT/J dependencies documented

  All OT/J projects using the <<<objectteams-parent-pom>>> implicitly depend on the following artifacts which are developed 
  independent of maven and simply repackaged using the {{{../objectteams-artifact-deployer}org.eclipse:objectteams-artifact-deployer}} module:
  
  [org.eclipse:objectteams-runtime] the Object Teams runtime repackaged from the <<<org.eclipse.objectteams.runtime>>> OSGi bundle.
  
  [org.eclipse:objectteams-otre-agent] the Java agent that hooks the Object Teams runtime into the JVM (repackaged from file <<<otre_agent.jar>>>
  from the <<<org.eclipse.objectteams.otdt>>> project).
  
  [org.eclipse:objectteams-otj-compiler] a compatible replacement for <<<org.eclipse.tycho:org.eclipse.jdt.core>>> that enables the 
  <<<org.eclipse.tycho:tycho-compiler-jdt>>> plugin to compile OT/J sources.

  []
  
  The following module is indirectly used:

  [org.apache.bcel:bcel] the original {{{http://jakarta.apache.org/bcel}apache bcel}} Byte Code Engineering Library.