<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mraynsford</id>
	<title>JogampWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mraynsford"/>
	<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Special:Contributions/Mraynsford"/>
	<updated>2026-04-21T13:13:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1929</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1929"/>
		<updated>2015-10-31T22:46:52Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Fat jars!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.3.1&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.3.1/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.3.1.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the package where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.3.1/jogl-all-main-2.3.1.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOAL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOCL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Native window drivers for NEWT (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|NEWT code and native libraries (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|occulusvr&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOGL code and native libraries (Oculus VR atomic jar files)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Android =&lt;br /&gt;
&lt;br /&gt;
There is a [[Maven_And_Android|separate page]] documenting one method of producing packages that work on both Android and ordinary&lt;br /&gt;
desktop Java.&lt;br /&gt;
&lt;br /&gt;
= Producing a fat jar =&lt;br /&gt;
&lt;br /&gt;
See [[JogAmp_JAR_File_Handling#Maven_Assembly_Plugin|JAR File Handling]].&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1928</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1928"/>
		<updated>2015-10-31T22:43:56Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Do not use &amp;lt;code&amp;gt; tags, as their formatting now appears to be broken&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.3.1&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.3.1/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.3.1.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the package where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.3.1/jogl-all-main-2.3.1.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOAL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOCL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Native window drivers for NEWT (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|NEWT code and native libraries (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|occulusvr&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOGL code and native libraries (Oculus VR atomic jar files)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Android =&lt;br /&gt;
&lt;br /&gt;
There is a [[Maven_And_Android|separate page]] documenting one method of producing packages that work on both Android and ordinary&lt;br /&gt;
desktop Java.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1927</id>
		<title>JogAmp JAR File Handling</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1927"/>
		<updated>2015-10-31T21:05:03Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Close your damn parens&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Native JAR Files =&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFiles Native JAR Files] explained.&lt;br /&gt;
&lt;br /&gt;
Native JAR files are loaded [{{SERVER}}/jogl/doc/userguide/index.html#automatednativelibraryloading automatically].&lt;br /&gt;
&lt;br /&gt;
= Applet / JNLP Usage =&lt;br /&gt;
&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
&lt;br /&gt;
A short &#039;&#039;copy&#039;&#039; is included in the static page [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment using NApplet].&lt;br /&gt;
&lt;br /&gt;
= Custom Bundling =&lt;br /&gt;
&lt;br /&gt;
== Multi-Jar ==&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=843 Multi-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, we support this feature with our native JAR lib loading mechanism. &lt;br /&gt;
&lt;br /&gt;
It is possible to merge all modules together, i.e.&lt;br /&gt;
&lt;br /&gt;
  multi.jar:&lt;br /&gt;
    gluegen-rt.jar&lt;br /&gt;
    jogl-all.jar&lt;br /&gt;
    user-app.jar&lt;br /&gt;
&lt;br /&gt;
  multi-natives-&amp;lt;os.and.arch&amp;gt;.jar:&lt;br /&gt;
    gluegen-rt-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
    jogl-all-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
&lt;br /&gt;
A combination with Fat-Jar is possible.&lt;br /&gt;
&lt;br /&gt;
== Fat-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=845 Discouraged Fat-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
Furthermore, adding all native library files for all supported platforms&lt;br /&gt;
will add-up to +3M of _compressed_ jar data!&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, &lt;br /&gt;
we support this feature with our native JAR lib loading mechanism.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
If the modules&#039;s jar file contains the folder &#039;natives/&amp;lt;os.and.arch&amp;gt;/&#039;&lt;br /&gt;
we assume a fat-jar and attempt to load all native libraries from the same.&lt;br /&gt;
        &lt;br /&gt;
If we don&#039;t have a fat-jar or if fat-jar loading doesn&#039;t result in extracted native libraries,&lt;br /&gt;
we assume a regular slim jar file.&lt;br /&gt;
&lt;br /&gt;
Layout:&lt;br /&gt;
&lt;br /&gt;
  /com/lala1/Lala1.class&lt;br /&gt;
  /com/lala2/Lala2.class&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala1.so&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala2.so&lt;br /&gt;
&lt;br /&gt;
A combination w/ Multi-Jar is of course possible.&lt;br /&gt;
&lt;br /&gt;
=== Creation ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
You can use the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task] to create a fat JAR. You must avoid file names collision, i.e you must exclude the file(s) with the same name(s) in multiple JARs. You can use [https://ant.apache.org/manual/Tasks/manifest.html Ant manifest task] to create a manifest file. The following line just keeps the strict minimum to make JogAmp work and should be used with the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;zipfileset src=&amp;quot;jogamp-fat.jar&amp;quot; includes=&amp;quot;**/*.class,**/*.png,**/*.glsl,**/*.vp,**/*.fp,**/*.bvp,**/*.bfp,**/*.so,**/*.jnilib,**/*.dylib,**/*.dll,**/.bin&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maven ====&lt;br /&gt;
[http://maven.apache.org/plugins/maven-shade-plugin/index.html Maven Shade Plugin] is the recommended plugin to use to create fat JARs with [http://maven.apache.org Maven]. [http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html This example] shows how to set some entries in the manifest file.&lt;br /&gt;
&lt;br /&gt;
==== Maven Assembly Plugin ====&lt;br /&gt;
&lt;br /&gt;
An example descriptor file that produces a fat jar containing all of the calling project&#039;s dependencies, and the JOGL/GlueGen native jar files placed into the correct directory inside the jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;assembly&lt;br /&gt;
  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
  xmlns=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0&amp;quot;&lt;br /&gt;
  xsi:schemaLocation=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;id&amp;gt;with-dependencies&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;includeBaseDirectory&amp;gt;false&amp;lt;/includeBaseDirectory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;formats&amp;gt;&lt;br /&gt;
    &amp;lt;format&amp;gt;jar&amp;lt;/format&amp;gt;&lt;br /&gt;
  &amp;lt;/formats&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;dependencySets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Unpack everything that isn&#039;t a JOGL or GlueGen library --&amp;gt;&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;excludes&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libgluegen-rt*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_desktop.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_mobile.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_awt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_macosx.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_x11.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnewt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
        &amp;lt;/excludes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Place the natives for the popular platforms into the correct place --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- in the resulting jar file. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/macosx-universal/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.jnilib&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencySets&amp;gt;&lt;br /&gt;
&amp;lt;/assembly&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be called in the usual manner (assuming that the descriptor file is in &amp;lt;tt&amp;gt;src/main/assembly/application.xml&amp;lt;/tt&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;maven-assembly-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;archive&amp;gt;&lt;br /&gt;
      &amp;lt;manifest&amp;gt;&lt;br /&gt;
        &amp;lt;mainClass&amp;gt;com.example.main.SomeMainClassHere&amp;lt;/mainClass&amp;gt;&lt;br /&gt;
      &amp;lt;/manifest&amp;gt;&lt;br /&gt;
    &amp;lt;/archive&amp;gt;&lt;br /&gt;
    &amp;lt;descriptors&amp;gt;&lt;br /&gt;
      &amp;lt;descriptor&amp;gt;src/main/assembly/application.xml&amp;lt;/descriptor&amp;gt;&lt;br /&gt;
    &amp;lt;/descriptors&amp;gt;&lt;br /&gt;
  &amp;lt;/configuration&amp;gt;&lt;br /&gt;
  &amp;lt;executions&amp;gt;&lt;br /&gt;
    &amp;lt;execution&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;
      &amp;lt;goals&amp;gt;&lt;br /&gt;
        &amp;lt;goal&amp;gt;single&amp;lt;/goal&amp;gt;&lt;br /&gt;
      &amp;lt;/goals&amp;gt;&lt;br /&gt;
    &amp;lt;/execution&amp;gt;&lt;br /&gt;
  &amp;lt;/executions&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is an executable jar file, suffixed with &amp;lt;tt&amp;gt;-with-dependencies.jar&amp;lt;/tt&amp;gt; that will execute &amp;lt;tt&amp;gt;com.example.main.SomeMainClassHere&amp;lt;/tt&amp;gt; and that will correctly find all of the native libraries at run-time.&lt;br /&gt;
&lt;br /&gt;
== One-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=846 One-Jar]&lt;br /&gt;
&lt;br /&gt;
One-Jar is incomplete, i.e. it does not provide a URL handler for &lt;br /&gt;
it&#039;s jar-in-jar resources - hence we would need to implement this functionality manually.&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/bugzilla/show_bug.cgi?id=846#c1 One-Jar lacks of URLHandler ...]&lt;br /&gt;
&lt;br /&gt;
For now, one can use Eclipse working jar-in-jar feature (see below).&lt;br /&gt;
Since Eclipse is under an open source license, one should be able&lt;br /&gt;
to locate the source code and include in a standalone toolkit, if so required.&lt;br /&gt;
&lt;br /&gt;
== JarMatey ==&lt;br /&gt;
&lt;br /&gt;
[http://staticvoidgames.com/JarMatey/ JarMatey] is an [https://github.com/KevinWorkman/JarMatey open source] tool for creating standalone self-executing JARs, similar to One-Jar but with a graphical user interface and no support for build tools (Ant, Maven). You can find a detailed tutorial about it [http://staticvoidgames.com/tutorials/deployment/joglExample here].&lt;br /&gt;
&lt;br /&gt;
== Eclipse ==&lt;br /&gt;
&lt;br /&gt;
Native JAR files and their respective base JAR files can be bundled in [{{SERVER}}/bugzilla/show_bug.cgi?id=522#c7 custom ways, e.g. eclipse Jar-In-Jar etc].&lt;br /&gt;
&lt;br /&gt;
    Manual tested w/ Eclipse:&lt;br /&gt;
    &lt;br /&gt;
    Preparations:&lt;br /&gt;
    ===============&lt;br /&gt;
    &lt;br /&gt;
    1) Set up a vanilla eclipse (3.7.0) workspace&lt;br /&gt;
    &lt;br /&gt;
    2) Add the JOGL User Library:&lt;br /&gt;
      - Window.Preference&lt;br /&gt;
       - Java.Build_Path.User_Libraries:&lt;br /&gt;
         + JOGL&lt;br /&gt;
            + gluegen-rt.jar&lt;br /&gt;
            + jogl-all.jar&lt;br /&gt;
            + gluegen-rt-natives-linux-amd64.jar&lt;br /&gt;
            + jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    &lt;br /&gt;
            You may add all other native JARs here.&lt;br /&gt;
            Note that these are not required in the CLASSPATH by JOGL,&lt;br /&gt;
            however, they are required by Eclipse to export your project as a Runnable JAR File.&lt;br /&gt;
&lt;br /&gt;
    3) New test project&lt;br /&gt;
      -  Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
           - Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
              + JOGL&lt;br /&gt;
      - Add some simple code ..&lt;br /&gt;
      - Run as Java Application ..&lt;br /&gt;
    &lt;br /&gt;
    Test-1:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Copy required libraries into a sub-folder next to the generated JAR&lt;br /&gt;
    &lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala01.jar&lt;br /&gt;
    ./lala01_lib/jogl-all.jar&lt;br /&gt;
    ./lala01_lib/jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    ./lala01_lib/... etc ..&lt;br /&gt;
    &lt;br /&gt;
    Test-2:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Package required libraries into generated JAR&lt;br /&gt;
&lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala02.jar:&lt;br /&gt;
      Manifest-Version: 1.0&lt;br /&gt;
      Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar&lt;br /&gt;
                          jogl-all-natives-linux-amd64.jar jogl-all.jar&lt;br /&gt;
      Class-Path: .&lt;br /&gt;
      Rsrc-Main-Class: Test01&lt;br /&gt;
      Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1926</id>
		<title>JogAmp JAR File Handling</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1926"/>
		<updated>2015-10-31T20:57:36Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Maven Assembly Plugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Native JAR Files =&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFiles Native JAR Files] explained.&lt;br /&gt;
&lt;br /&gt;
Native JAR files are loaded [{{SERVER}}/jogl/doc/userguide/index.html#automatednativelibraryloading automatically].&lt;br /&gt;
&lt;br /&gt;
= Applet / JNLP Usage =&lt;br /&gt;
&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
&lt;br /&gt;
A short &#039;&#039;copy&#039;&#039; is included in the static page [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment using NApplet].&lt;br /&gt;
&lt;br /&gt;
= Custom Bundling =&lt;br /&gt;
&lt;br /&gt;
== Multi-Jar ==&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=843 Multi-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, we support this feature with our native JAR lib loading mechanism. &lt;br /&gt;
&lt;br /&gt;
It is possible to merge all modules together, i.e.&lt;br /&gt;
&lt;br /&gt;
  multi.jar:&lt;br /&gt;
    gluegen-rt.jar&lt;br /&gt;
    jogl-all.jar&lt;br /&gt;
    user-app.jar&lt;br /&gt;
&lt;br /&gt;
  multi-natives-&amp;lt;os.and.arch&amp;gt;.jar:&lt;br /&gt;
    gluegen-rt-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
    jogl-all-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
&lt;br /&gt;
A combination with Fat-Jar is possible.&lt;br /&gt;
&lt;br /&gt;
== Fat-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=845 Discouraged Fat-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
Furthermore, adding all native library files for all supported platforms&lt;br /&gt;
will add-up to +3M of _compressed_ jar data!&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, &lt;br /&gt;
we support this feature with our native JAR lib loading mechanism.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
If the modules&#039;s jar file contains the folder &#039;natives/&amp;lt;os.and.arch&amp;gt;/&#039;&lt;br /&gt;
we assume a fat-jar and attempt to load all native libraries from the same.&lt;br /&gt;
        &lt;br /&gt;
If we don&#039;t have a fat-jar or if fat-jar loading doesn&#039;t result in extracted native libraries,&lt;br /&gt;
we assume a regular slim jar file.&lt;br /&gt;
&lt;br /&gt;
Layout:&lt;br /&gt;
&lt;br /&gt;
  /com/lala1/Lala1.class&lt;br /&gt;
  /com/lala2/Lala2.class&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala1.so&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala2.so&lt;br /&gt;
&lt;br /&gt;
A combination w/ Multi-Jar is of course possible.&lt;br /&gt;
&lt;br /&gt;
=== Creation ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
You can use the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task] to create a fat JAR. You must avoid file names collision, i.e you must exclude the file(s) with the same name(s) in multiple JARs. You can use [https://ant.apache.org/manual/Tasks/manifest.html Ant manifest task] to create a manifest file. The following line just keeps the strict minimum to make JogAmp work and should be used with the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;zipfileset src=&amp;quot;jogamp-fat.jar&amp;quot; includes=&amp;quot;**/*.class,**/*.png,**/*.glsl,**/*.vp,**/*.fp,**/*.bvp,**/*.bfp,**/*.so,**/*.jnilib,**/*.dylib,**/*.dll,**/.bin&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maven ====&lt;br /&gt;
[http://maven.apache.org/plugins/maven-shade-plugin/index.html Maven Shade Plugin] is the recommended plugin to use to create fat JARs with [http://maven.apache.org Maven]. [http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html This example] shows how to set some entries in the manifest file.&lt;br /&gt;
&lt;br /&gt;
==== Maven Assembly Plugin ====&lt;br /&gt;
&lt;br /&gt;
An example descriptor file that produces a fat jar containing all of the calling project&#039;s dependencies, and the JOGL/GlueGen native jar files placed into the correct directory inside the jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;assembly&lt;br /&gt;
  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
  xmlns=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0&amp;quot;&lt;br /&gt;
  xsi:schemaLocation=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;id&amp;gt;with-dependencies&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;includeBaseDirectory&amp;gt;false&amp;lt;/includeBaseDirectory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;formats&amp;gt;&lt;br /&gt;
    &amp;lt;format&amp;gt;jar&amp;lt;/format&amp;gt;&lt;br /&gt;
  &amp;lt;/formats&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;dependencySets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Unpack everything that isn&#039;t a JOGL or GlueGen library --&amp;gt;&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;excludes&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libgluegen-rt*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_desktop.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_mobile.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_awt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_macosx.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_x11.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnewt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
        &amp;lt;/excludes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Place the natives for the popular platforms into the correct place --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- in the resulting jar file. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/macosx-universal/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.jnilib&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencySets&amp;gt;&lt;br /&gt;
&amp;lt;/assembly&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be called in the usual manner (assuming that the descriptor file is in &amp;lt;tt&amp;gt;src/main/assembly/application.xml&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;maven-assembly-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;archive&amp;gt;&lt;br /&gt;
      &amp;lt;manifest&amp;gt;&lt;br /&gt;
        &amp;lt;mainClass&amp;gt;com.example.main.SomeMainClassHere&amp;lt;/mainClass&amp;gt;&lt;br /&gt;
      &amp;lt;/manifest&amp;gt;&lt;br /&gt;
    &amp;lt;/archive&amp;gt;&lt;br /&gt;
    &amp;lt;descriptors&amp;gt;&lt;br /&gt;
      &amp;lt;descriptor&amp;gt;src/main/assembly/application.xml&amp;lt;/descriptor&amp;gt;&lt;br /&gt;
    &amp;lt;/descriptors&amp;gt;&lt;br /&gt;
  &amp;lt;/configuration&amp;gt;&lt;br /&gt;
  &amp;lt;executions&amp;gt;&lt;br /&gt;
    &amp;lt;execution&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;
      &amp;lt;goals&amp;gt;&lt;br /&gt;
        &amp;lt;goal&amp;gt;single&amp;lt;/goal&amp;gt;&lt;br /&gt;
      &amp;lt;/goals&amp;gt;&lt;br /&gt;
    &amp;lt;/execution&amp;gt;&lt;br /&gt;
  &amp;lt;/executions&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is an executable jar file, suffixed with &amp;lt;tt&amp;gt;-with-dependencies.jar&amp;lt;/tt&amp;gt; that will execute &amp;lt;tt&amp;gt;com.example.main.SomeMainClassHere&amp;lt;/tt&amp;gt; and that will correctly find all of the native libraries at run-time.&lt;br /&gt;
&lt;br /&gt;
== One-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=846 One-Jar]&lt;br /&gt;
&lt;br /&gt;
One-Jar is incomplete, i.e. it does not provide a URL handler for &lt;br /&gt;
it&#039;s jar-in-jar resources - hence we would need to implement this functionality manually.&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/bugzilla/show_bug.cgi?id=846#c1 One-Jar lacks of URLHandler ...]&lt;br /&gt;
&lt;br /&gt;
For now, one can use Eclipse working jar-in-jar feature (see below).&lt;br /&gt;
Since Eclipse is under an open source license, one should be able&lt;br /&gt;
to locate the source code and include in a standalone toolkit, if so required.&lt;br /&gt;
&lt;br /&gt;
== JarMatey ==&lt;br /&gt;
&lt;br /&gt;
[http://staticvoidgames.com/JarMatey/ JarMatey] is an [https://github.com/KevinWorkman/JarMatey open source] tool for creating standalone self-executing JARs, similar to One-Jar but with a graphical user interface and no support for build tools (Ant, Maven). You can find a detailed tutorial about it [http://staticvoidgames.com/tutorials/deployment/joglExample here].&lt;br /&gt;
&lt;br /&gt;
== Eclipse ==&lt;br /&gt;
&lt;br /&gt;
Native JAR files and their respective base JAR files can be bundled in [{{SERVER}}/bugzilla/show_bug.cgi?id=522#c7 custom ways, e.g. eclipse Jar-In-Jar etc].&lt;br /&gt;
&lt;br /&gt;
    Manual tested w/ Eclipse:&lt;br /&gt;
    &lt;br /&gt;
    Preparations:&lt;br /&gt;
    ===============&lt;br /&gt;
    &lt;br /&gt;
    1) Set up a vanilla eclipse (3.7.0) workspace&lt;br /&gt;
    &lt;br /&gt;
    2) Add the JOGL User Library:&lt;br /&gt;
      - Window.Preference&lt;br /&gt;
       - Java.Build_Path.User_Libraries:&lt;br /&gt;
         + JOGL&lt;br /&gt;
            + gluegen-rt.jar&lt;br /&gt;
            + jogl-all.jar&lt;br /&gt;
            + gluegen-rt-natives-linux-amd64.jar&lt;br /&gt;
            + jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    &lt;br /&gt;
            You may add all other native JARs here.&lt;br /&gt;
            Note that these are not required in the CLASSPATH by JOGL,&lt;br /&gt;
            however, they are required by Eclipse to export your project as a Runnable JAR File.&lt;br /&gt;
&lt;br /&gt;
    3) New test project&lt;br /&gt;
      -  Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
           - Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
              + JOGL&lt;br /&gt;
      - Add some simple code ..&lt;br /&gt;
      - Run as Java Application ..&lt;br /&gt;
    &lt;br /&gt;
    Test-1:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Copy required libraries into a sub-folder next to the generated JAR&lt;br /&gt;
    &lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala01.jar&lt;br /&gt;
    ./lala01_lib/jogl-all.jar&lt;br /&gt;
    ./lala01_lib/jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    ./lala01_lib/... etc ..&lt;br /&gt;
    &lt;br /&gt;
    Test-2:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Package required libraries into generated JAR&lt;br /&gt;
&lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala02.jar:&lt;br /&gt;
      Manifest-Version: 1.0&lt;br /&gt;
      Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar&lt;br /&gt;
                          jogl-all-natives-linux-amd64.jar jogl-all.jar&lt;br /&gt;
      Class-Path: .&lt;br /&gt;
      Rsrc-Main-Class: Test01&lt;br /&gt;
      Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1925</id>
		<title>JogAmp JAR File Handling</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=JogAmp_JAR_File_Handling&amp;diff=1925"/>
		<updated>2015-10-31T20:55:53Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Add example assembly descriptor file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Native JAR Files =&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFiles Native JAR Files] explained.&lt;br /&gt;
&lt;br /&gt;
Native JAR files are loaded [{{SERVER}}/jogl/doc/userguide/index.html#automatednativelibraryloading automatically].&lt;br /&gt;
&lt;br /&gt;
= Applet / JNLP Usage =&lt;br /&gt;
&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
&lt;br /&gt;
A short &#039;&#039;copy&#039;&#039; is included in the static page [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment using NApplet].&lt;br /&gt;
&lt;br /&gt;
= Custom Bundling =&lt;br /&gt;
&lt;br /&gt;
== Multi-Jar ==&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=843 Multi-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, we support this feature with our native JAR lib loading mechanism. &lt;br /&gt;
&lt;br /&gt;
It is possible to merge all modules together, i.e.&lt;br /&gt;
&lt;br /&gt;
  multi.jar:&lt;br /&gt;
    gluegen-rt.jar&lt;br /&gt;
    jogl-all.jar&lt;br /&gt;
    user-app.jar&lt;br /&gt;
&lt;br /&gt;
  multi-natives-&amp;lt;os.and.arch&amp;gt;.jar:&lt;br /&gt;
    gluegen-rt-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
    jogl-all-natives-&amp;lt;os.and.arch&amp;gt;.jar&lt;br /&gt;
&lt;br /&gt;
A combination with Fat-Jar is possible.&lt;br /&gt;
&lt;br /&gt;
== Fat-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=845 Discouraged Fat-Jar]&lt;br /&gt;
&lt;br /&gt;
This configuration is discouraged, since such deployment removes our artifacts as stored in&lt;br /&gt;
the jar&#039;s manifest file, which helps identifying the jogamp modules for bug reports etc.&lt;br /&gt;
&lt;br /&gt;
Furthermore, adding all native library files for all supported platforms&lt;br /&gt;
will add-up to +3M of _compressed_ jar data!&lt;br /&gt;
&lt;br /&gt;
However, since we don&#039;t want to patronize our user base, &lt;br /&gt;
we support this feature with our native JAR lib loading mechanism.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
If the modules&#039;s jar file contains the folder &#039;natives/&amp;lt;os.and.arch&amp;gt;/&#039;&lt;br /&gt;
we assume a fat-jar and attempt to load all native libraries from the same.&lt;br /&gt;
        &lt;br /&gt;
If we don&#039;t have a fat-jar or if fat-jar loading doesn&#039;t result in extracted native libraries,&lt;br /&gt;
we assume a regular slim jar file.&lt;br /&gt;
&lt;br /&gt;
Layout:&lt;br /&gt;
&lt;br /&gt;
  /com/lala1/Lala1.class&lt;br /&gt;
  /com/lala2/Lala2.class&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala1.so&lt;br /&gt;
  /natives/&amp;lt;os.and.arch&amp;gt;/libLala2.so&lt;br /&gt;
&lt;br /&gt;
A combination w/ Multi-Jar is of course possible.&lt;br /&gt;
&lt;br /&gt;
=== Creation ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
You can use the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task] to create a fat JAR. You must avoid file names collision, i.e you must exclude the file(s) with the same name(s) in multiple JARs. You can use [https://ant.apache.org/manual/Tasks/manifest.html Ant manifest task] to create a manifest file. The following line just keeps the strict minimum to make JogAmp work and should be used with the [http://ant.apache.org/manual/Tasks/jar.html Ant jar task]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;zipfileset src=&amp;quot;jogamp-fat.jar&amp;quot; includes=&amp;quot;**/*.class,**/*.png,**/*.glsl,**/*.vp,**/*.fp,**/*.bvp,**/*.bfp,**/*.so,**/*.jnilib,**/*.dylib,**/*.dll,**/.bin&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maven ====&lt;br /&gt;
[http://maven.apache.org/plugins/maven-shade-plugin/index.html Maven Shade Plugin] is the recommended plugin to use to create fat JARs with [http://maven.apache.org Maven]. [http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html This example] shows how to set some entries in the manifest file.&lt;br /&gt;
&lt;br /&gt;
==== Maven Assembly Plugin ====&lt;br /&gt;
&lt;br /&gt;
An example descriptor file that produces a fat jar containing all of the calling project&#039;s dependencies, and the JOGL/GlueGen native jar files placed into the correct directory inside the jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;assembly&lt;br /&gt;
  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
  xmlns=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0&amp;quot;&lt;br /&gt;
  xsi:schemaLocation=&amp;quot;http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;id&amp;gt;with-dependencies&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;includeBaseDirectory&amp;gt;false&amp;lt;/includeBaseDirectory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;formats&amp;gt;&lt;br /&gt;
    &amp;lt;format&amp;gt;jar&amp;lt;/format&amp;gt;&lt;br /&gt;
  &amp;lt;/formats&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;dependencySets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Unpack everything that isn&#039;t a JOGL or GlueGen library --&amp;gt;&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;excludes&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libgluegen-rt*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_desktop.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libjogl_mobile.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_awt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_macosx.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnativewindow_x11.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
          &amp;lt;exclude&amp;gt;libnewt.*&amp;lt;/exclude&amp;gt;&lt;br /&gt;
        &amp;lt;/excludes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Place the natives for the popular platforms into the correct place --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- in the resulting jar file. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/linux-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-linux-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.so&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-amd64/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-amd64&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/windows-i586/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-windows-i586&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.dll&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependencySet&amp;gt;&lt;br /&gt;
      &amp;lt;outputDirectory&amp;gt;/natives/macosx-universal/&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
      &amp;lt;useProjectArtifact&amp;gt;true&amp;lt;/useProjectArtifact&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;unpack&amp;gt;true&amp;lt;/unpack&amp;gt;&lt;br /&gt;
      &amp;lt;includes&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.gluegen:gluegen-rt:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
        &amp;lt;include&amp;gt;org.jogamp.jogl:jogl-all:jar:natives-macosx-universal&amp;lt;/include&amp;gt;&lt;br /&gt;
      &amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;unpackOptions&amp;gt;&lt;br /&gt;
        &amp;lt;includes&amp;gt;&amp;lt;include&amp;gt;*.jnilib&amp;lt;/include&amp;gt;&amp;lt;/includes&amp;gt;&lt;br /&gt;
      &amp;lt;/unpackOptions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencySet&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencySets&amp;gt;&lt;br /&gt;
&amp;lt;/assembly&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be called in the usual manner (assuming that the descriptor file is in &amp;lt;tt&amp;gt;src/main/assembly/application.xml&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;maven-assembly-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;archive&amp;gt;&lt;br /&gt;
      &amp;lt;manifest&amp;gt;&lt;br /&gt;
        &amp;lt;mainClass&amp;gt;com.example.main.SomeMainClassHere&amp;lt;/mainClass&amp;gt;&lt;br /&gt;
      &amp;lt;/manifest&amp;gt;&lt;br /&gt;
    &amp;lt;/archive&amp;gt;&lt;br /&gt;
    &amp;lt;descriptors&amp;gt;&lt;br /&gt;
      &amp;lt;descriptor&amp;gt;src/main/assembly/application.xml&amp;lt;/descriptor&amp;gt;&lt;br /&gt;
    &amp;lt;/descriptors&amp;gt;&lt;br /&gt;
  &amp;lt;/configuration&amp;gt;&lt;br /&gt;
  &amp;lt;executions&amp;gt;&lt;br /&gt;
    &amp;lt;execution&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;
      &amp;lt;goals&amp;gt;&lt;br /&gt;
        &amp;lt;goal&amp;gt;single&amp;lt;/goal&amp;gt;&lt;br /&gt;
      &amp;lt;/goals&amp;gt;&lt;br /&gt;
    &amp;lt;/execution&amp;gt;&lt;br /&gt;
  &amp;lt;/executions&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== One-Jar ==&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/bugzilla/show_bug.cgi?id=846 One-Jar]&lt;br /&gt;
&lt;br /&gt;
One-Jar is incomplete, i.e. it does not provide a URL handler for &lt;br /&gt;
it&#039;s jar-in-jar resources - hence we would need to implement this functionality manually.&lt;br /&gt;
&lt;br /&gt;
See [{{SERVER}}/bugzilla/show_bug.cgi?id=846#c1 One-Jar lacks of URLHandler ...]&lt;br /&gt;
&lt;br /&gt;
For now, one can use Eclipse working jar-in-jar feature (see below).&lt;br /&gt;
Since Eclipse is under an open source license, one should be able&lt;br /&gt;
to locate the source code and include in a standalone toolkit, if so required.&lt;br /&gt;
&lt;br /&gt;
== JarMatey ==&lt;br /&gt;
&lt;br /&gt;
[http://staticvoidgames.com/JarMatey/ JarMatey] is an [https://github.com/KevinWorkman/JarMatey open source] tool for creating standalone self-executing JARs, similar to One-Jar but with a graphical user interface and no support for build tools (Ant, Maven). You can find a detailed tutorial about it [http://staticvoidgames.com/tutorials/deployment/joglExample here].&lt;br /&gt;
&lt;br /&gt;
== Eclipse ==&lt;br /&gt;
&lt;br /&gt;
Native JAR files and their respective base JAR files can be bundled in [{{SERVER}}/bugzilla/show_bug.cgi?id=522#c7 custom ways, e.g. eclipse Jar-In-Jar etc].&lt;br /&gt;
&lt;br /&gt;
    Manual tested w/ Eclipse:&lt;br /&gt;
    &lt;br /&gt;
    Preparations:&lt;br /&gt;
    ===============&lt;br /&gt;
    &lt;br /&gt;
    1) Set up a vanilla eclipse (3.7.0) workspace&lt;br /&gt;
    &lt;br /&gt;
    2) Add the JOGL User Library:&lt;br /&gt;
      - Window.Preference&lt;br /&gt;
       - Java.Build_Path.User_Libraries:&lt;br /&gt;
         + JOGL&lt;br /&gt;
            + gluegen-rt.jar&lt;br /&gt;
            + jogl-all.jar&lt;br /&gt;
            + gluegen-rt-natives-linux-amd64.jar&lt;br /&gt;
            + jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    &lt;br /&gt;
            You may add all other native JARs here.&lt;br /&gt;
            Note that these are not required in the CLASSPATH by JOGL,&lt;br /&gt;
            however, they are required by Eclipse to export your project as a Runnable JAR File.&lt;br /&gt;
&lt;br /&gt;
    3) New test project&lt;br /&gt;
      -  Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
           - Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
              + JOGL&lt;br /&gt;
      - Add some simple code ..&lt;br /&gt;
      - Run as Java Application ..&lt;br /&gt;
    &lt;br /&gt;
    Test-1:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Copy required libraries into a sub-folder next to the generated JAR&lt;br /&gt;
    &lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala01.jar&lt;br /&gt;
    ./lala01_lib/jogl-all.jar&lt;br /&gt;
    ./lala01_lib/jogl-all-natives-linux-amd64.jar&lt;br /&gt;
    ./lala01_lib/... etc ..&lt;br /&gt;
    &lt;br /&gt;
    Test-2:&lt;br /&gt;
    =========&lt;br /&gt;
    &lt;br /&gt;
    Export&lt;br /&gt;
      - Right-click your project in the Package Explorer and click &amp;quot;Export&amp;quot;&lt;br /&gt;
        - Select Java.Runnable_JAR_file&lt;br /&gt;
          + Launch configuration&lt;br /&gt;
          + some destination path&lt;br /&gt;
          + Library handling:&lt;br /&gt;
            Package required libraries into generated JAR&lt;br /&gt;
&lt;br /&gt;
    Result: Works!&lt;br /&gt;
    &lt;br /&gt;
    ./lala02.jar:&lt;br /&gt;
      Manifest-Version: 1.0&lt;br /&gt;
      Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar&lt;br /&gt;
                          jogl-all-natives-linux-amd64.jar jogl-all.jar&lt;br /&gt;
      Class-Path: .&lt;br /&gt;
      Rsrc-Main-Class: Test01&lt;br /&gt;
      Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1540</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1540"/>
		<updated>2014-08-07T10:48:50Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Available packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the package where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOAL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-android&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOCL Android runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|Native window drivers for NEWT (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt-main&lt;br /&gt;
|2.2.0&lt;br /&gt;
|NEWT code and native libraries (atomic frontend)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|occulusvr&lt;br /&gt;
|2.2.0&lt;br /&gt;
|JOGL code and native libraries (Oculus VR atomic jar files)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Android =&lt;br /&gt;
&lt;br /&gt;
There is a [[Maven_And_Android|seperate page]] documenting one method of producing packages that work on both Android and ordinary&lt;br /&gt;
desktop Java.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=SW_Tracking_Report_Objectives_for_the_release_2.1.5&amp;diff=1444</id>
		<title>SW Tracking Report Objectives for the release 2.1.5</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=SW_Tracking_Report_Objectives_for_the_release_2.1.5&amp;diff=1444"/>
		<updated>2014-03-06T11:19:36Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Added 991&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugs =&lt;br /&gt;
&lt;br /&gt;
List started on 2014-02-01, concluding [[SW Tracking Report Objectives for the release 2.1.4|Release 2.1.4]]  -  &#039;&#039;&#039;Open&#039;&#039;&#039; - continuation @ [[SW Tracking Report Objectives for the release 2.2.0|Release 2.2.0]].&lt;br /&gt;
&lt;br /&gt;
This is a bugfix and enhancement release..&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/bugzilla/buglist.cgi?chfield=bug_status&amp;amp;chfieldfrom=2014-02-01&amp;amp;chfieldto=2014-02-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;classification=Unclassified&amp;amp;classification=JogAmp_Core&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;resolution=FIXED&amp;amp;resolution=INVALID&amp;amp;resolution=WONTFIX&amp;amp;resolution=DUPLICATE&amp;amp;resolution=WORKSFORME&amp;amp;resolution=MOVED&amp;amp;title=Bug%20List:%20Progress_2_1_5 Closed bugs 2.1.5] [{{SERVER}}/bugzilla/buglist.cgi?chfield=bug_status&amp;amp;chfieldfrom=2014-02-01&amp;amp;chfieldto=2014-02-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;classification=Unclassified&amp;amp;classification=JogAmp_Core&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;resolution=FIXED&amp;amp;resolution=INVALID&amp;amp;resolution=WONTFIX&amp;amp;resolution=DUPLICATE&amp;amp;resolution=WORKSFORME&amp;amp;resolution=MOVED&amp;amp;title=Bug%20List:%20Progress_2_1_5&amp;amp;ctype=atom RSS Feed]&lt;br /&gt;
&lt;br /&gt;
== Bugs already fixed for this release ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
   |disablecache=1&lt;br /&gt;
   |status=resolved,verified&lt;br /&gt;
   |id=684,927,958,962,970,972,974,975,980,984,991&lt;br /&gt;
   |columns=id,priority,status,severity,component,summary,votes&lt;br /&gt;
   |sort=id&lt;br /&gt;
   |order=desc&lt;br /&gt;
   |noresultsmessage=Lazy devs}}&lt;br /&gt;
&lt;br /&gt;
== JOCL Bugs already fixed for this release ===&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
   |disablecache=1&lt;br /&gt;
   |status=resolved,verified&lt;br /&gt;
   |id=920,959,960,963,964,978,979,981&lt;br /&gt;
   |columns=id,priority,status,severity,component,summary,votes&lt;br /&gt;
   |sort=id&lt;br /&gt;
   |order=desc&lt;br /&gt;
   |noresultsmessage=Lazy devs}}&lt;br /&gt;
&lt;br /&gt;
== Bugs to fix for this release w/ low effort (root causes clearly identified, reporter available) ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
   |disablecache=1&lt;br /&gt;
   |status=unconfirmed,in_progress,confirmed&lt;br /&gt;
   |id=684,927,980,984&lt;br /&gt;
   |columns=id,priority,status,severity,component,summary,votes&lt;br /&gt;
   |sort=id&lt;br /&gt;
   |order=desc&lt;br /&gt;
   |noresultsmessage=We have no bugs quickly fixable to fix for this release}}&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1096</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1096"/>
		<updated>2013-07-22T18:21:54Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the package where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Android =&lt;br /&gt;
&lt;br /&gt;
There is a [[Maven_And_Android|seperate page]] documenting one method of producing packages that work on both Android and ordinary&lt;br /&gt;
desktop Java.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=1095</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=1095"/>
		<updated>2013-07-22T18:20:01Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Note 2.0.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;10&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ adb install jp4da-android/target/jp4da-android.apk &lt;br /&gt;
1026 KB/s (2334537 bytes in 2.221s)&lt;br /&gt;
	pkg: /data/local/tmp/jp4da-android.apk&lt;br /&gt;
Success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program running on an ordinary Linux desktop:&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;br /&gt;
&lt;br /&gt;
The program installed on the Android emulator:&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu1.png|The installed application]]&lt;br /&gt;
&lt;br /&gt;
The program running on the Android emulator:&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu2.png|The running application]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1094</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1094"/>
		<updated>2013-07-22T18:18:22Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Package details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the package where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1093</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1093"/>
		<updated>2013-07-22T18:17:38Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Note 2.0.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|2.0.2&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|2.0.2&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|2.0.2&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1062</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1062"/>
		<updated>2013-07-11T16:29:51Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Add package table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Available packages =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Group ID&lt;br /&gt;
|Artifact ID&lt;br /&gt;
|Since&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|GlueGen runtime code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for the GlueGen runtime&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen-rt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen runtime code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.gluegen&lt;br /&gt;
|gluegen&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|GlueGen non-runtime code and native libraries (and atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOAL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.joal&lt;br /&gt;
|joal&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOAL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOCL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jocl&lt;br /&gt;
|jocl&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOCL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-all&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-android&lt;br /&gt;
|2.0.2-rc12&lt;br /&gt;
|JOGL code and native libraries (Android)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (mobile)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-mobile&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL mobile code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt-main&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|Meta-package for automatic dependency resolution for JOGL (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl-noawt&lt;br /&gt;
|2.0-rc11&lt;br /&gt;
|JOGL code and native libraries (without AWT)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|jogl&lt;br /&gt;
|&lt;br /&gt;
|JOGL atomic jar files&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|nativewindow&lt;br /&gt;
|&lt;br /&gt;
|Native window drivers for NEWT (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|org.jogamp.jogl&lt;br /&gt;
|newt&lt;br /&gt;
|&lt;br /&gt;
|NEWT code and native libraries (atomic jars)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1061</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1061"/>
		<updated>2013-07-11T15:52:12Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Note portability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available. It&#039;s &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; recommended to depend on platform-specific jar files&lt;br /&gt;
in the manner shown above unless there&#039;s an extremely good reason to do so; to do otherwise&lt;br /&gt;
harms portability for no good reason!&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1060</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1060"/>
		<updated>2013-07-11T13:08:23Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* The jogamp.org test repository (optional) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available.&lt;br /&gt;
&lt;br /&gt;
= The jogamp.org test repository (optional) =&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1059</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1059"/>
		<updated>2013-07-11T13:08:09Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
= Add dependencies on the correct packages =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= Package details =&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
= Atomic jar files (optional) =&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available.&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=1058</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=1058"/>
		<updated>2013-07-11T12:46:11Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Maven */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
See  [[JogAmp JAR File Handling|JogAmp JAR File Handling]], for details on native JAR files and custom JAR bundling.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Add gluegen-rt.jar and jogl.jar to the project.&lt;br /&gt;
           You may add all other gluegen-rt-natives-*-*.jar and jogl-all-natives-*-*.jar JARs as well.&lt;br /&gt;
           Note that these are not required in the CLASSPATH by JOGL,&lt;br /&gt;
           however, they are required by Eclipse to export your project as a Runnable JAR File.&lt;br /&gt;
* Expand the jogl-all and gluegen-rt JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages for all the JogAmp projects have been pushed to&lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central]. Please see the&lt;br /&gt;
[[Maven]] page for details on how to use them in your projects.&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl-all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl-all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl-all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl-all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl-all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl-all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1057</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1057"/>
		<updated>2013-07-11T12:44:28Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Add atomic example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add dependencies on the correct packages ===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== Package details ===&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
=== Atomic jar files (optional) ===&lt;br /&gt;
&lt;br /&gt;
The so-called &amp;lt;i&amp;gt;atomic&amp;lt;/i&amp;gt; jar files are provided as attachments to the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;newt&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;nativewindow&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; packages. As an example, to depend only on the Linux AMD64&lt;br /&gt;
native jar files, on X11, using only the core of &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; and the native window toolkit in your&lt;br /&gt;
own projects, use the following dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.gluegen-rt&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;os-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;newt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;core&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;natives-linux-amd64&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;nativewindow&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;classifier&amp;gt;driver-x11&amp;lt;/classifier&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the choice of which atomic jars are required is really outside of the scope of this&lt;br /&gt;
documentation. It&#039;s recommended that you browse the packages in question to see which jar&lt;br /&gt;
files are available.&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1056</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1056"/>
		<updated>2013-07-11T12:35:25Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Fix code element&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add dependencies on the correct packages ===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== Package details ===&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1055</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1055"/>
		<updated>2013-07-11T12:35:04Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Document *-main packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add dependencies on the correct packages ===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== Package details ===&lt;br /&gt;
&lt;br /&gt;
For each JogAmp project, there are essentially two packages published: One contains the main compiled&lt;br /&gt;
jar files and any associated native library jar files, and the other simply contains &amp;lt;i&amp;gt;dependencies&amp;lt;/i&amp;gt;&lt;br /&gt;
on those files. Using &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; as the example, the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;&lt;br /&gt;
package in the jogamp.org test repository:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all/2.0.2-rc12/&lt;br /&gt;
&lt;br /&gt;
Note that there are many native jar files attached to the main package. However, if you were to use&lt;br /&gt;
the following dependency in your own project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven would download &amp;lt;tt&amp;gt;jogl-all-2.0.2-rc12.jar&amp;lt;/tt&amp;gt; but would completely ignore all of the other&lt;br /&gt;
native jar files. Why? The reason for this is that the native jar files are uploaded as extra artifacts&lt;br /&gt;
to the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package and are, in a manner of speaking, not really considered to be part of&lt;br /&gt;
the project where dependencies are concerned. The POM for the &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; package adds&lt;br /&gt;
explicit dependencies on all of the extra artifacts in the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl-all-main/2.0.2-rc12/jogl-all-main-2.0.2-rc12.pom&lt;br /&gt;
&lt;br /&gt;
So, when you add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; in your own project, the native jar files of&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; are brought in as transitive dependencies and everything works as expected.&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1054</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1054"/>
		<updated>2013-07-11T12:23:10Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Add dependencies on the correct packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add dependencies on the correct packages ===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
Additionally, for &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt; support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jocl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jocl-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.joal&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;joal-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1053</id>
		<title>Maven</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven&amp;diff=1053"/>
		<updated>2013-07-11T12:21:12Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Created page with &amp;#039;__TOC__  JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to  [http://search.maven.org/#search|ga|1|jogamp Maven Central].  === Add dependencie…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
JogAmp now contains support for Maven. As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogamp Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add dependencies on the correct packages ===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t know which packages you want, you almost certainly want to use the&lt;br /&gt;
&amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; packages, as these automatically&lt;br /&gt;
set up the correct dependencies on the native jar files for all platforms.&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0.2-rc12&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0.2-rc12&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Downloading_and_installing_JOGL&amp;diff=897</id>
		<title>Downloading and installing JOGL</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Downloading_and_installing_JOGL&amp;diff=897"/>
		<updated>2013-04-04T16:43:12Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Maven&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before you can build a project that uses JOGL [https://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE in your IDE or on the command line], you&#039;ll need to download and install the JOGL JAR files and native JARs or native library files (&amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files).&lt;br /&gt;
&lt;br /&gt;
You have a choice of JOGL versions to download. The [{{SERVER}}/deployment/jogamp-current/archive/ latest stable version] is the safest, but lags behind in features. The [{{SERVER}}/deployment/autobuilds/master/ latest automatic build] contains all checked-in code, but may be failing some tests.&lt;br /&gt;
&lt;br /&gt;
= Downloading the latest stable version =&lt;br /&gt;
&lt;br /&gt;
Go to [{{SERVER}}/deployment/jogamp-current/archive/ this page] and download the all-in-one 7z archive file:&lt;br /&gt;
&lt;br /&gt;
: [{{SERVER}}/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z]&lt;br /&gt;
&lt;br /&gt;
== Using the 7z jogamp-all-platforms archive ==&lt;br /&gt;
&lt;br /&gt;
After inflating the file with [http://www.7-zip.org/ 7zip], you will have the general directory structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/etc/test.sh&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/etc/test.bat&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/etc/test_dbg.sh&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/etc/test_dbg.bat&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/jar/&amp;amp;lt;module&amp;amp;gt;.jar&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/jar/&amp;amp;lt;module&amp;amp;gt;-natives-&amp;amp;lt;os.and.arch&amp;amp;gt;.jar&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/lib/&lt;br /&gt;
&amp;amp;lt;jogamp-all-platforms&amp;amp;gt;/&amp;amp;lt;module&amp;amp;gt;-java-src.zip*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Legend:&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFileNameConvention os.and.arch] &lt;br /&gt;
* module: gluegen, joal, jogl or jocl&lt;br /&gt;
&lt;br /&gt;
Now you can &#039;&#039;&#039;test&#039;&#039;&#039; the &#039;&#039;archive&#039;&#039; as described &lt;br /&gt;
in [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
If anything doesn&#039;t work as predicted, please follow our [[Jogl FAQ#Bugreports &amp;amp; Testing|bugreport guide]].&lt;br /&gt;
&lt;br /&gt;
While keeping the above directory structure as-is, you can go ahead and&lt;br /&gt;
* add the non-native JAR files to your CLASSPATH (IDE, manual, ..)&lt;br /&gt;
* attach the java-source files to the non-native JAR files (IDE)&lt;br /&gt;
&lt;br /&gt;
.. now you are set to start using JogAmp module in your project.&lt;br /&gt;
&lt;br /&gt;
The above is detailed in [[Setting_up_a_JogAmp_project_in_your_favorite_IDE#Eclipse_IDE_project|Eclipse Project]]&lt;br /&gt;
and [[Setting_up_a_JogAmp_project_in_your_favorite_IDE#Eclipse_IDE_user_library|Eclipse User Library]].&lt;br /&gt;
&lt;br /&gt;
= Downloading the latest aggregated autobuild =&lt;br /&gt;
&lt;br /&gt;
Got to [{{SERVER}}/deployment/archive/master/?C=M;O=D this page] and navigate into the first folder,&lt;br /&gt;
which shall be the latest &#039;&#039;aggregated autobuild&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Then navigate further down to &#039;&#039;&#039;archive&#039;&#039;&#039; and download the file &#039;&#039;&#039;jogamp-all-platforms.7z&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For example, on &#039;&#039;&#039;13-Mar-2013 20:19 CET&#039;&#039;&#039;, the latest &#039;&#039;aggregated autobuild&#039;&#039; was:&lt;br /&gt;
&lt;br /&gt;
 [{{SERVER}}/deployment/archive/master/gluegen_646-joal_408-jogl_930-jocl_756/archive/jogamp-all-platforms.7z {{SERVER}}/deployment/archive/master/gluegen_646-joal_408-jogl_930-jocl_756/archive/jogamp-all-platforms.7z]&lt;br /&gt;
&lt;br /&gt;
Now you can continue [[#Using the 7z jogamp-all-platforms archive|here]].&lt;br /&gt;
&lt;br /&gt;
= Downloading the latest automatic build =&lt;br /&gt;
&lt;br /&gt;
For the latest automatic build, we have to download gluegen and jogl separately.&lt;br /&gt;
&lt;br /&gt;
First, go to [{{SERVER}}/deployment/autobuilds/master/?C=M;O=D this page] and click on the most recent &amp;lt;tt&amp;gt;gluegen-b*&amp;lt;/tt&amp;gt; directory. Then download one of these files for each platform you&#039;re developing on:&lt;br /&gt;
&lt;br /&gt;
: 32-bit Windows: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-windows-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Windows: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-windows-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32/64-bit Mac OS X: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-macosx-universal.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32-bit Linux: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-linux-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Linux: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-linux-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32-bit Solaris: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-solaris-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Solaris: &amp;lt;tt&amp;gt;gluegen-2.0-bvvv-20yymmdd-solaris-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, go back to [{{SERVER}}/deployment/autobuilds/master/?C=M;O=D this page] and click on the most recent &amp;lt;tt&amp;gt;jogl-b*&amp;lt;/tt&amp;gt; directory. Then download one of these files for each platform you&#039;re developing on:&lt;br /&gt;
&lt;br /&gt;
: 32-bit Windows: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-windows-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Windows: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-windows-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32/64-bit Mac OS X: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-macosx-universal.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32-bit Linux: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-linux-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Linux: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-linux-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 32-bit Solaris: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-solaris-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
: 64-bit Solaris: &amp;lt;tt&amp;gt;jogl-2.0-bvvv-20yymmdd-solaris-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that these automatic builds may not have passed all the regression tests. You can check the test results on the [https://jogamp.org/chuck/ build server] to make sure you&#039;re not downloading a broken build.&lt;br /&gt;
&lt;br /&gt;
== Native JARs vs. native library files ==&lt;br /&gt;
&lt;br /&gt;
JOGL uses native libraries to interface with each platform&#039;s OpenGL library. You can either download these native libraries wrapped up in JAR files (the &amp;quot;native JARs&amp;quot; option), or you can download them as separate &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files (the &amp;quot;native library files&amp;quot; option).&lt;br /&gt;
&lt;br /&gt;
When using native JARs, JOGL automatically unzips the native JARs at startup into a temporary directory, then loads the resulting &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files from there. When using native library files, JOGL just loads them directly from where they sit, with no unzipping.&lt;br /&gt;
&lt;br /&gt;
Using native JARs is usually easiest, since there are fewer files to manage and it allows different platforms&#039; native library files to coexist in the same directory. Only use the native library files directly if you need fine control over native library file placement or if your app doesn&#039;t have permissions to create temporary directories.&lt;br /&gt;
&lt;br /&gt;
== Unzipping the files ==&lt;br /&gt;
&lt;br /&gt;
Unzip all the downloaded files with [http://www.7-zip.org/ 7zip]. An unzipped file has this general directory structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;archive&amp;amp;gt;/&lt;br /&gt;
&amp;amp;lt;archive&amp;amp;gt;/jar/&lt;br /&gt;
&amp;amp;lt;archive&amp;amp;gt;/lib/&lt;br /&gt;
&amp;amp;lt;archive&amp;amp;gt;/&amp;amp;lt;module&amp;amp;gt;-java-src.zip*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you may copy the required JARs out of each &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; folder and the native library files (if you&#039;re using them) out of each &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt; folder. For a full desktop installation using native JARs, here are the files you need. Note that the native JAR names are different for each platform, so you can use some or all of the native JARs together to create a multi-platform installation.&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|64-bit Windows&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|64-bit Linux&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|32/64-bit Mac&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt-natives-windows-amd64.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt-natives-linux-amd64.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt-natives-macosx-universal.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-all-natives-windows-amd64.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all-natives-linux-amd64.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all-natives-macosx-universal.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{|cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|32-bit Windows&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|32-bit Linux&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt-natives-windows-i586.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt-natives-linux-i586.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-all-natives-windows-i586.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all-natives-linux-i586.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For a full desktop installation using native library files, here are the files you need. Note that the native library files have the same names for 32-bit and 64-bit platforms, so 32-bit and 64-bit platforms can&#039;t coexist in one installation.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|Windows&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|Linux&lt;br /&gt;
!align=&amp;quot;left&amp;quot;|Mac&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-rt.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-all.jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;gluegen-java-src.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;gluegen-rt.dll&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libgluegen-rt.so&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libgluegen-rt.jnilib&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;jogl_desktop.dll&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libjogl_desktop.so&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libjogl_desktop.jnilib&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;nativewindow_awt.dll&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnativewindow_awt.so&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnativewindow_awt.jnilib&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;nativewindow_win32.dll&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnativewindow_x11.so&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnativewindow_macosx.jnilib&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;newt.dll&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnewt.so&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;libnewt.jnilib&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
Alternatively, the Jogamp packages are available through Maven.&lt;br /&gt;
&lt;br /&gt;
See the [[Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven|maven instructions]] for a guide to using Jogamp in&lt;br /&gt;
Maven projects.&lt;br /&gt;
&lt;br /&gt;
= More information =&lt;br /&gt;
&lt;br /&gt;
JogAmp follows a [[Jogamp_Versioning_and_Releases#Release_Classification|release scheme]],&lt;br /&gt;
which describes the following locations to download the 7z archives from:&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/deployment/ Deployment Home]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/archive/ Signed Release]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-next/archive/ Signed Candidate]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-next/v2.0-rc3archive/ Specific Version]&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] describes the content of the 7z archive files.&lt;br /&gt;
&lt;br /&gt;
These installations contain all of JOGL. If you want to remove parts you don&#039;t use, see [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] for more information.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogamp_Versioning_and_Releases&amp;diff=896</id>
		<title>Jogamp Versioning and Releases</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogamp_Versioning_and_Releases&amp;diff=896"/>
		<updated>2013-04-04T16:40:30Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
[[Release 2.0-rc11|2.0-rc11]],[[Release 2.0-rc10|2.0-rc10]], [[Release 2.0-rc9|2.0-rc9]], [[Release 2.0-rc8|2.0-rc8]], [[Release 2.0-rc7|2.0-rc7]], [[Release 2.0-rc6|2.0-rc6]], [[Release 2.0-rc5|2.0-rc5]], [[Release 2.0-rc4|2.0-rc4]], [[Release 2.0-rc3|2.0-rc3]], [[Release 2.0-rc2|2.0-rc2]], [[Release 2.0-rc1|2.0-rc1]]&lt;br /&gt;
&lt;br /&gt;
=== Current Aliases ===&lt;br /&gt;
&lt;br /&gt;
* [http://jogamp.org/deployment/jogamp-current/ jogamp-current] -&amp;gt; [http://jogamp.org/deployment/v2.0-rc11/ v2.0-rc11]&lt;br /&gt;
* [http://jogamp.org/deployment/jogamp-next/ jogamp-next] -&amp;gt; [http://jogamp.org/deployment/v2.0-rc11/ v2.0-rc11]&lt;br /&gt;
* [http://jogamp.org/deployment/webstart/ webstart] -&amp;gt; [http://jogamp.org/deployment/v2.0-rc11/ v2.0-rc11]&lt;br /&gt;
* [http://jogamp.org/deployment/webstart-next/ webstart-next] -&amp;gt; [http://jogamp.org/deployment/v2.0-rc11/ v2.0-rc11]&lt;br /&gt;
&lt;br /&gt;
== Release Classification ==&lt;br /&gt;
&lt;br /&gt;
Releases follow the above mentioned [[#Version_Classification|versioning]] scheme.&lt;br /&gt;
&lt;br /&gt;
The following list is ordered from &amp;lt;i&amp;gt;stable and oldest&amp;lt;/i&amp;gt; to &amp;lt;i&amp;gt;experimental and newest&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== [{{SERVER}}/deployment/jogamp-current/ Signed Release] ===&lt;br /&gt;
* This is our current signed release, IE a manual promoted and signed autobuild.&lt;br /&gt;
* It is suitable for JNLP and Applets (with or without JNLP).&lt;br /&gt;
* This is the &amp;lt;b&amp;gt;most stable and recommended&amp;lt;/b&amp;gt; version.&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/archive/ Archive folder] containing [[#Release_and_Archived_Files|platform ZIP files]] for manual installation.&lt;br /&gt;
* [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]]&lt;br /&gt;
* See instructions for  [[Downloading and installing JOGL#Downloading the latest stable version|downloading and installing]].&lt;br /&gt;
&lt;br /&gt;
=== [{{SERVER}}/deployment/jogamp-next/ Signed Release Candidate] ===&lt;br /&gt;
* This is our signed release candidate, IE a manual promoted and signed autobuild.&lt;br /&gt;
* It is suitable for JNLP and Applets (with or without JNLP).&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/archive/ Platform ZIP archive&#039;s URL] for manual installation.&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/archive/ Archive folder] containing [[#Release_and_Archived_Files|platform ZIP files]] for manual installation.&lt;br /&gt;
* See instructions for  [[Downloading and installing JOGL#Downloading the latest stable version|downloading and installing]].&lt;br /&gt;
&lt;br /&gt;
=== [{{SERVER}}/deployment/v2.0-rc3/ Signed Release Specific Version] ===&lt;br /&gt;
* This is a specific signed release, IE a manual promoted autobuild.&lt;br /&gt;
* It is suitable for JNLP and Applets (with or without JNLP).&lt;br /&gt;
* [{{SERVER}}/deployment/v2.0-rc3/archive/ Archive folder] containing [[#Release_and_Archived_Files|platform ZIP files]] for manual installation.&lt;br /&gt;
* See instructions for  [[Downloading and installing JOGL#Downloading the latest stable version|downloading and installing]].&lt;br /&gt;
&lt;br /&gt;
===  [{{SERVER}}/deployment/archive/master/?C=M;O=D Latest Aggregated Autobuild] ===&lt;br /&gt;
* This is our latest aggregated autobuild, which we seem fit for broad testing and submitting a [[Jogl FAQ#Bugreports &amp;amp; Testing|bugreport]].&lt;br /&gt;
* It is not signed and hence not suitable for JNLP and Applets.&lt;br /&gt;
* See instructions for  [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|downloading and installing]].&lt;br /&gt;
&lt;br /&gt;
=== [{{SERVER}}/deployment/autobuilds/ Autobuilds] ===&lt;br /&gt;
What others call &amp;lt;i&amp;gt;nightlies&amp;lt;/i&amp;gt;, we call it autobuild.&lt;br /&gt;
Autobuilds are provided by our [{{SERVER}}/chuck/job/jogl/ Jenkins build server]:&lt;br /&gt;
* For [{{SERVER}}/chuck/job/jogl/ each project build reports] are available:&lt;br /&gt;
** [{{SERVER}}/chuck/job/jogl/lastSuccessfulBuild/ Last Successful JOGL Build]&lt;br /&gt;
** [{{SERVER}}/chuck/job/jogl/476/ JOGL Build 476]&lt;br /&gt;
* They are [{{SERVER}}/chuck/job/jogl/476/changes#detail0 triggered by git commits] &lt;br /&gt;
* Here is a [{{SERVER}}/chuck/job/jogl/changes list of all JOGL changes].&lt;br /&gt;
* These builds are also tested on all supported platforms automatically with junit, see a [{{SERVER}}/chuck/job/jogl/label=win7-x86_64-nvida/lastCompletedBuild/testReport/ complete test report from one platform].&lt;br /&gt;
* [{{SERVER}}/deployment/autobuilds/master/jogl-b485-2011-09-20_08-30-36/ Autobuild URL] containing [[#Autobuild_Files|platform ZIP files]] for manual installation.&lt;br /&gt;
&lt;br /&gt;
=== [{{SERVER}}/deployment/archive/ Archived builds] ===&lt;br /&gt;
* Contains archived builds and releases.&lt;br /&gt;
* May be signed.&lt;br /&gt;
* [{{SERVER}}/deployment/archive/rc/gluegen_28-joal_17-jogl_41-jocl_25/archive/ archive URL] containing [[#Release_and_Archived_Files|platform ZIP files]] for manual installation.&lt;br /&gt;
&lt;br /&gt;
== Version Classification ==&lt;br /&gt;
&lt;br /&gt;
=== Version Fingerprint ===&lt;br /&gt;
&lt;br /&gt;
You can get the [[Jogl FAQ#Get the Source Code|get the source code]] via git, &lt;br /&gt;
hence all references of a JogAmp module version boils down to:&lt;br /&gt;
&lt;br /&gt;
* module base version&lt;br /&gt;
* git commit sha1 hash&lt;br /&gt;
* build number&lt;br /&gt;
* module OS and ARCH&lt;br /&gt;
&lt;br /&gt;
We construct a full version string as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;module&amp;gt;-&amp;lt;base_version&amp;gt;-b&amp;lt;build_number&amp;gt;-&amp;lt;yyyymmdd&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== artifact.properties ===&lt;br /&gt;
&lt;br /&gt;
The version fingerprint is available in the &lt;br /&gt;
[{{SERVER}}/deployment/autobuilds/master/jogl-b485-2011-09-20_08-30-36/artifact.properties artifact.properties] file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gluegen.build.number=200&lt;br /&gt;
gluegen.build.id=2010-11-09_22-30-24&lt;br /&gt;
gluegen.build.branch=master&lt;br /&gt;
gluegen.build.commit=92e1e8b24d128e08f13b05bd630ad7b0bf1cbf9f&lt;br /&gt;
jogl.build.number=209&lt;br /&gt;
jogl.build.id=2010-11-09_22-35-00&lt;br /&gt;
jogl.build.branch=master&lt;br /&gt;
jogl.build.commit=4ea473a2cbf59fcbd8e82d26da389cd8c2b4a291&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We deploy artifacts.properties in the online [{{SERVER}}/deployment/autobuilds/master/jogl-b485-2011-09-20_08-30-36/ build folder]&lt;br /&gt;
and within the platform ZIP archives.&lt;br /&gt;
&lt;br /&gt;
=== JAR Manifest ===&lt;br /&gt;
&lt;br /&gt;
The version fingerprint is also included within each JAR Manifest file,&lt;br /&gt;
where the Specification-Version equals the module base version&lt;br /&gt;
and the Implementation-Version equals the above mentioned full version string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Ant-Version: Apache Ant 1.8.0&lt;br /&gt;
Created-By: 1.6.0_21-b06 (Sun Microsystems Inc.)&lt;br /&gt;
Specification-Title: Java Bindings for OpenGL API Specification&lt;br /&gt;
Specification-Version: 2.0&lt;br /&gt;
Specification-Vendor: JogAmp community&lt;br /&gt;
Implementation-Title: Java Bindings for OpenGL Runtime Environment&lt;br /&gt;
Implementation-Version: 2.0-b209-20101110&lt;br /&gt;
Implementation-Branch: master&lt;br /&gt;
Implementation-Commit: 4ea473a2cbf59fcbd8e82d26da389cd8c2b4a291&lt;br /&gt;
Implementation-Vendor: JogAmp community&lt;br /&gt;
Extension-Name: javax.media.opengl&lt;br /&gt;
Implementation-Vendor-Id: com.jogamp&lt;br /&gt;
Trusted-Library: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each module has also a base version, like major and minor, ie 2.0,&lt;br /&gt;
which we may change to emphasize major feature and API changes.&lt;br /&gt;
&lt;br /&gt;
==== Runtime Version Check ====&lt;br /&gt;
&lt;br /&gt;
Each module has a build in [http://jogamp.org/deployment/jogamp-next/javadoc/gluegen/javadoc/com/jogamp/common/util/JogampVersion.html JogampVersion] specialization with a static &amp;lt;code&amp;gt;getInstance()&amp;lt;/code&amp;gt; method to access the singleton instance,&lt;br /&gt;
eg. for the [http://jogamp.org/deployment/jogamp-next/javadoc/gluegen/javadoc/com/jogamp/common/GlueGenVersion.html#getInstance%28%29 GlueGenVersion] or [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/JoglVersion.html#getInstance%28%29 JoglVersion]. You may utilize the version information from within your application in a programmatic manner. For the latter you may find the [http://jogamp.org/deployment/jogamp-next/javadoc/gluegen/javadoc/com/jogamp/common/os/Platform.html Platform] information useful as well.&lt;br /&gt;
&lt;br /&gt;
Each module&#039;s [http://jogamp.org/deployment/jogamp-next/javadoc/gluegen/javadoc/com/jogamp/common/util/JogampVersion.html JogampVersion] specialization also contain a static main entry allowing you to retrieve the version information at runtime as described below.&lt;br /&gt;
&lt;br /&gt;
When invoked, ie via JOGL&#039;s platform ZIP file:&lt;br /&gt;
* sh etc/test.sh (Unixoid), or &lt;br /&gt;
* etc\test.bat (Windows)&lt;br /&gt;
you will see the full dump of the runtime platform and the above mentioned version footprint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
Platform: LINUX / Linux 3.7.1-x64-k10-nlb-jau01 (os), amd64 (arch), GENERIC_ABI, 8 cores&lt;br /&gt;
MachineDescription: runtimeValidated true, littleEndian true, 32Bit false, primitive size / alignment:&lt;br /&gt;
  int8    1 / 1, int16   2 / 2&lt;br /&gt;
  int     4 / 4, long    8 / 8&lt;br /&gt;
  int32   4 / 4, int64   8 / 8&lt;br /&gt;
  float   4 / 4, double  8 / 8, ldouble 16 / 16&lt;br /&gt;
  pointer 8 / 8, page    4096&lt;br /&gt;
Platform: Java Version: 1.6.0_38, VM: Java HotSpot(TM) 64-Bit Server VM, Runtime: Java(TM) SE Runtime Environment&lt;br /&gt;
Platform: Java Vendor: Sun Microsystems Inc., http://java.sun.com/, JavaSE: true, Java6: true, AWT enabled: true&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
Package: com.jogamp.common&lt;br /&gt;
Extension Name: com.jogamp.common&lt;br /&gt;
Specification Title: GlueGen Java Bindings Generator&lt;br /&gt;
Specification Vendor: JogAmp Community&lt;br /&gt;
Specification Version: 2.0&lt;br /&gt;
Implementation Title: GlueGen Run-Time&lt;br /&gt;
Implementation Vendor: JogAmp Community&lt;br /&gt;
Implementation Vendor ID: com.jogamp&lt;br /&gt;
Implementation URL: http://jogamp.org/&lt;br /&gt;
Implementation Version: 2.0-b646-20130313&lt;br /&gt;
Implementation Branch: master&lt;br /&gt;
Implementation Commit: 1a4514accc8f61ab7ff5fe8c82d22a5ef356c865&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
Package: javax.media.opengl&lt;br /&gt;
Extension Name: javax.media.opengl&lt;br /&gt;
Specification Title: Java Bindings for OpenGL API Specification&lt;br /&gt;
Specification Vendor: JogAmp Community&lt;br /&gt;
Specification Version: 2.0&lt;br /&gt;
Implementation Title: Java Bindings for OpenGL Runtime Environment&lt;br /&gt;
Implementation Vendor: JogAmp Community&lt;br /&gt;
Implementation Vendor ID: com.jogamp&lt;br /&gt;
Implementation URL: http://jogamp.org/&lt;br /&gt;
Implementation Version: 2.0-b930-20130313&lt;br /&gt;
Implementation Branch: master&lt;br /&gt;
Implementation Commit: 58f6f4e5665ae2c72ec6bbd86ad5a36bef00de07&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
Default Profiles on device X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x4430d82d, isOwner false, &amp;lt;62c09554, 518bf072&amp;gt;[count 0, qsz 0, owner &amp;lt;NULL&amp;gt;]]]&lt;br /&gt;
    Native&lt;br /&gt;
        GL4bc   true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL4 true [4.2 (Core profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL3bc   true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL3 true [4.2 (Core profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL2 true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL2ES1  true&lt;br /&gt;
        GLES1   true [1.0 (ES profile, FBO, software)]&lt;br /&gt;
        GL2ES2  true&lt;br /&gt;
        GLES2   true [2.0 (ES profile, ES2 compatible, FBO, software)]&lt;br /&gt;
    Profiles&lt;br /&gt;
        GLProfile[GL2ES2/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL2ES1/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL2/GL2.hw]&lt;br /&gt;
        GLProfile[GL4/GL4.hw]&lt;br /&gt;
        GLProfile[GL3/GL3.hw]&lt;br /&gt;
        GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
        GLProfile[GLES2/GLES2.sw]&lt;br /&gt;
        GLProfile[GLES1/GLES1.sw]&lt;br /&gt;
        GLProfile[GL2GL3/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL3bc/GL3bc.hw]&lt;br /&gt;
        default GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Desktop Capabilities:&lt;br /&gt;
    GLCaps[glx vid 0x21, fbc 0x105: rgba 0x8/8/8/0, opaque, accum-rgba 16/16/16/16, dp/st/ms: 24/8/0, dbl, mono  , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[fbo, pbuffer [r2t 0, r2tr 0, float 0], bitmap]]&lt;br /&gt;
    GLCaps[glx vid 0x22, fbc 0x106: rgba 0x8/8/8/0, opaque, accum-rgba 16/16/16/16, dp/st/ms: 24/8/0, dbl, mono  , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[fbo, pbuffer [r2t 0, r2tr 0, float 0], bitmap]]&lt;br /&gt;
   ...&lt;br /&gt;
EGL Capabilities:&lt;br /&gt;
    GLCaps[egl cfg 0x19, vid 0x21: rgba 0x8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms: 0/0/0, dbl, mono  , sw, GLProfile[GLES2/GLES2.sw], on-scr[fbo, pbuffer [r2t 0, r2tr 0, float 0], bitmap], [0xd: GL, GLES1, GLES2, VG]]&lt;br /&gt;
    GLCaps[egl cfg 0x1a, vid 0x21: rgba 0x8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms: 0/0/0, dbl, mono  , sw, GLProfile[GLES2/GLES2.sw], on-scr[fbo, pbuffer [r2t 0, r2tr 0, float 0], bitmap], [0xd: GL, GLES1, GLES2, VG]]&lt;br /&gt;
    ...&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
X11GraphicsDevice[type .x11, connection :0]:&lt;br /&gt;
    Native&lt;br /&gt;
        GL4bc   true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL4 true [4.2 (Core profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL3bc   true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL3 true [4.2 (Core profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL2 true [4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware)]&lt;br /&gt;
        GL2ES1  true&lt;br /&gt;
        GLES1   true [1.0 (ES profile, FBO, software)]&lt;br /&gt;
        GL2ES2  true&lt;br /&gt;
        GLES2   true [2.0 (ES profile, ES2 compatible, FBO, software)]&lt;br /&gt;
    Profiles&lt;br /&gt;
        GLProfile[GL2ES2/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL2ES1/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL2/GL2.hw]&lt;br /&gt;
        GLProfile[GL4/GL4.hw]&lt;br /&gt;
        GLProfile[GL3/GL3.hw]&lt;br /&gt;
        GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
        GLProfile[GLES2/GLES2.sw]&lt;br /&gt;
        GLProfile[GLES1/GLES1.sw]&lt;br /&gt;
        GLProfile[GL2GL3/GL4bc.hw]&lt;br /&gt;
        GLProfile[GL3bc/GL3bc.hw]&lt;br /&gt;
        default GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
&lt;br /&gt;
Swap Interval  -1&lt;br /&gt;
GL Profile     GLProfile[GL4bc/GL4bc.hw]&lt;br /&gt;
CTX VERSION    4.2 (Compatibility profile, arb, ES2 compatible, FBO, hardware) - 4.2.0 NVIDIA 310.32&lt;br /&gt;
GL             jogamp.opengl.gl4.GL4bcImpl@6f9bb25a&lt;br /&gt;
GL_VENDOR      NVIDIA Corporation&lt;br /&gt;
GL_RENDERER    GeForce GTX 660/PCIe/SSE2&lt;br /&gt;
GL_VERSION     4.2.0 NVIDIA 310.32&lt;br /&gt;
GLSL           true, has-compiler: true, version: 4.20 NVIDIA via Cg compiler&lt;br /&gt;
GL_EXTENSIONS  302&lt;br /&gt;
                              GL_ARB_arrays_of_arrays GL_ARB_base_instance ...&lt;br /&gt;
GLX_EXTENSIONS 27&lt;br /&gt;
               GLX_ARB_fbconfig_float GLX_ARB_create_context_robustness ...&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
Requested: GLCaps[rgba 0x8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms: 16/0/0, dbl, mono  , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[.]]&lt;br /&gt;
Chosen   : GLCaps[glx vid 0x27, fbc 0x10d: rgba 0x8/8/8/0, opaque, accum-rgba 16/16/16/16, dp/st/ms: 24/0/0, dbl, mono  , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[.]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The dump is hold in the file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt; which you should send to us in case of a bugreport.&lt;br /&gt;
&lt;br /&gt;
===== Runtime Debug Logs =====&lt;br /&gt;
&lt;br /&gt;
You may also like to send us the debug version:&lt;br /&gt;
* sh etc/test_dbg.sh (Unixoid), or &lt;br /&gt;
* etc\test_dbg.bat (Windows)&lt;br /&gt;
which produces the file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt; and should be send to us to complete the bugreport as well.&lt;br /&gt;
&lt;br /&gt;
==== Retrieve Release Version Tag from GIT Hash ====&lt;br /&gt;
&lt;br /&gt;
git-show-tags-of-commit.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
&lt;br /&gt;
sha1=$1&lt;br /&gt;
shift&lt;br /&gt;
&lt;br /&gt;
git show-ref --tags -d | grep ^$sha1 | sed -e &#039;s,.* refs/tags/,,&#039; -e &#039;s/\^{}//&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JOGL example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; git-show-tags-of-commit.sh 9ff0b0dafea2a03a915c97eb1513c39c27b6a7ae&lt;br /&gt;
v2.0-rc8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GlueGen example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; git-show-tags-of-commit.sh 4ce601b38ca8418eddbe8cca4d531e6161fae26b&lt;br /&gt;
v2.0-rc7&lt;br /&gt;
v2.0-rc8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maven ==&lt;br /&gt;
See the [[Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven|maven instructions]] for a guide to using Jogamp in&lt;br /&gt;
Maven projects.&lt;br /&gt;
&lt;br /&gt;
== Autobuild Files ==&lt;br /&gt;
[{{SERVER}}/deployment/autobuilds/master/jogl-b485-2011-09-20_08-30-36/ Autobuild Platform ZIP files] for each module&lt;br /&gt;
follow the [[#Version_Classification|versioning]] scheme plus contain the platform identifier [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFileNameConvention OS and ARCH]:&lt;br /&gt;
&amp;lt;pre&amp;gt;   &lt;br /&gt;
   jogl-2.0-b210-20101110-linux-amd64.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release and Archived Files ==&lt;br /&gt;
The [{{SERVER}}/deployment/jogamp-current/archive/ release archive folder] &lt;br /&gt;
contains 7z archive files for each platform containing all modules, ie. &#039;&#039;jogamp-linux-&#039;&#039;&#039;os.and.arch&#039;&#039;&#039;.7z&#039;&#039;.&lt;br /&gt;
The &#039;&#039;&#039;os.and.arch&#039;&#039;&#039; refers to the&lt;br /&gt;
[{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NativeJARFileNameConvention native file naming convention].&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
* &amp;lt;tt&amp;gt;jogamp-linux-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;jogamp-linux-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;jogamp-windows-amd64.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;jogamp-windows-i586.7z&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The folder also contains the Java API document ZIP files:&lt;br /&gt;
* &amp;lt;tt&amp;gt;gluegen-javadoc.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;jogl-javadoc.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;jocl-javadoc.zip&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;joal-javadoc.zip&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=837</id>
		<title>Maintainer and Contacts</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=837"/>
		<updated>2013-01-16T16:29:40Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Contacts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Maintainer =&lt;br /&gt;
&lt;br /&gt;
* JogAmp IT Infrastructure, Architecture and Janitor&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
* Gluegen&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
* JOAL&lt;br /&gt;
** [[#Xerxes Rånby|Xerxes Rånby]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
** GPU Curve Rendering&lt;br /&gt;
*** [[#Rami Santina|Rami Santina]]&lt;br /&gt;
* Java3D&lt;br /&gt;
** [[#Harvey Harrison|Harvey Harrison]]&lt;br /&gt;
* JOCL&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]] &#039;&#039;(interim)&#039;&#039;&lt;br /&gt;
* Engine Support&lt;br /&gt;
** [[#Julien Gouesse|Julien Gouesse]]&lt;br /&gt;
* Maven packages&lt;br /&gt;
** [[#Mark Raynsford|Mark Raynsford]]&lt;br /&gt;
* Art (graphics, demos, ..)&lt;br /&gt;
** [[#Dominik Ströhlein|Dominik Ströhlein]]&lt;br /&gt;
* &#039;&#039;Open Positions&#039;&#039;&lt;br /&gt;
** JOCL&lt;br /&gt;
** jogl-utils&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
&lt;br /&gt;
You can address the JogAmp Community via:&lt;br /&gt;
* [http://jogamp.org/ Web]&lt;br /&gt;
* [http://forum.jogamp.org/ Forum/Mailinglist]&lt;br /&gt;
* [http://jogamp.org/wiki/index.php/Chatroom JogAmp IRC]&lt;br /&gt;
* Email&lt;br /&gt;
** mediastream [@] jogamp.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Contact_Maintainer&amp;quot;&amp;gt;&lt;br /&gt;
Please feel welcome to contact the maintainers for commercial support inquiries,&lt;br /&gt;
specific questions you seem not fit for public discussions or to fund the work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sven Gothel ==&lt;br /&gt;
* sgothel [@] jausoft.com&lt;br /&gt;
* http://jausoft.com/blog/tag/jogl/&lt;br /&gt;
* Contracting and funding&lt;br /&gt;
** via &#039;&#039;Göthel Software e.K., contact jogamp [@] jausoft.com&#039;&#039;&lt;br /&gt;
** micro payments [http://flattr.com/thing/1028522/JogAmp-Maintainer-Sven-Gothel via Flattr]&lt;br /&gt;
&lt;br /&gt;
== Julien Gouesse ==&lt;br /&gt;
* gouessej [@] orange.fr&lt;br /&gt;
* http://gouessej.wordpress.com/tag/jogl/&lt;br /&gt;
&lt;br /&gt;
== Xerxes Rånby ==&lt;br /&gt;
* xerxes [@] gudinna.com&lt;br /&gt;
* http://labb.zafena.se/?category_name=jogamp&lt;br /&gt;
* http://twitter.com/xranby&lt;br /&gt;
** Micro payments via flatter: http://flattr.com/thing/1074999/JogAmp-JOAL-Maintainer-Xerxes-Rnby&lt;br /&gt;
&lt;br /&gt;
== Rami Santina ==&lt;br /&gt;
* http://ramisantina.com/blog/&lt;br /&gt;
&lt;br /&gt;
== Mark Raynsford ==&lt;br /&gt;
* http://io7m.com/&lt;br /&gt;
&lt;br /&gt;
== Harvey Harrison ==&lt;br /&gt;
* harvey.harrison [@] gmail.com&lt;br /&gt;
* https://github.com/hharrison&lt;br /&gt;
&lt;br /&gt;
== Dominik Ströhlein ==&lt;br /&gt;
* http://copypastaresearch.tumblr.com/&lt;br /&gt;
&lt;br /&gt;
== Wade Walker ==&lt;br /&gt;
* http://wadeawalker.wordpress.com/&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
We are confident to make your JogAmp experience a successful story.&lt;br /&gt;
&lt;br /&gt;
If you have commercial support requests or like to fund our work&amp;lt;br&amp;gt;&lt;br /&gt;
please feel free to contact the module maintainer [[#Contact_Maintainer|as listed above]].&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=836</id>
		<title>Maintainer and Contacts</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=836"/>
		<updated>2013-01-16T16:29:12Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Contacts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Maintainer =&lt;br /&gt;
&lt;br /&gt;
* JogAmp IT Infrastructure, Architecture and Janitor&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
* Gluegen&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
* JOAL&lt;br /&gt;
** [[#Xerxes Rånby|Xerxes Rånby]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]]&lt;br /&gt;
** GPU Curve Rendering&lt;br /&gt;
*** [[#Rami Santina|Rami Santina]]&lt;br /&gt;
* Java3D&lt;br /&gt;
** [[#Harvey Harrison|Harvey Harrison]]&lt;br /&gt;
* JOCL&lt;br /&gt;
** [[#Sven Gothel|Sven Gothel]] &#039;&#039;(interim)&#039;&#039;&lt;br /&gt;
* Engine Support&lt;br /&gt;
** [[#Julien Gouesse|Julien Gouesse]]&lt;br /&gt;
* Maven packages&lt;br /&gt;
** [[#Mark Raynsford|Mark Raynsford]]&lt;br /&gt;
* Art (graphics, demos, ..)&lt;br /&gt;
** [[#Dominik Ströhlein|Dominik Ströhlein]]&lt;br /&gt;
* &#039;&#039;Open Positions&#039;&#039;&lt;br /&gt;
** JOCL&lt;br /&gt;
** jogl-utils&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
&lt;br /&gt;
You can address the JogAmp Community via:&lt;br /&gt;
* [http://jogamp.org/ Web]&lt;br /&gt;
* [http://forum.jogamp.org/ Forum/Mailinglist]&lt;br /&gt;
* [http://https://jogamp.org/wiki/index.php/Chatroom JogAmp IRC]&lt;br /&gt;
* Email&lt;br /&gt;
** mediastream [@] jogamp.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Contact_Maintainer&amp;quot;&amp;gt;&lt;br /&gt;
Please feel welcome to contact the maintainers for commercial support inquiries,&lt;br /&gt;
specific questions you seem not fit for public discussions or to fund the work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sven Gothel ==&lt;br /&gt;
* sgothel [@] jausoft.com&lt;br /&gt;
* http://jausoft.com/blog/tag/jogl/&lt;br /&gt;
* Contracting and funding&lt;br /&gt;
** via &#039;&#039;Göthel Software e.K., contact jogamp [@] jausoft.com&#039;&#039;&lt;br /&gt;
** micro payments [http://flattr.com/thing/1028522/JogAmp-Maintainer-Sven-Gothel via Flattr]&lt;br /&gt;
&lt;br /&gt;
== Julien Gouesse ==&lt;br /&gt;
* gouessej [@] orange.fr&lt;br /&gt;
* http://gouessej.wordpress.com/tag/jogl/&lt;br /&gt;
&lt;br /&gt;
== Xerxes Rånby ==&lt;br /&gt;
* xerxes [@] gudinna.com&lt;br /&gt;
* http://labb.zafena.se/?category_name=jogamp&lt;br /&gt;
* http://twitter.com/xranby&lt;br /&gt;
** Micro payments via flatter: http://flattr.com/thing/1074999/JogAmp-JOAL-Maintainer-Xerxes-Rnby&lt;br /&gt;
&lt;br /&gt;
== Rami Santina ==&lt;br /&gt;
* http://ramisantina.com/blog/&lt;br /&gt;
&lt;br /&gt;
== Mark Raynsford ==&lt;br /&gt;
* http://io7m.com/&lt;br /&gt;
&lt;br /&gt;
== Harvey Harrison ==&lt;br /&gt;
* harvey.harrison [@] gmail.com&lt;br /&gt;
* https://github.com/hharrison&lt;br /&gt;
&lt;br /&gt;
== Dominik Ströhlein ==&lt;br /&gt;
* http://copypastaresearch.tumblr.com/&lt;br /&gt;
&lt;br /&gt;
== Wade Walker ==&lt;br /&gt;
* http://wadeawalker.wordpress.com/&lt;br /&gt;
&lt;br /&gt;
= Support =&lt;br /&gt;
&lt;br /&gt;
We are confident to make your JogAmp experience a successful story.&lt;br /&gt;
&lt;br /&gt;
If you have commercial support requests or like to fund our work&amp;lt;br&amp;gt;&lt;br /&gt;
please feel free to contact the module maintainer [[#Contact_Maintainer|as listed above]].&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=835</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=835"/>
		<updated>2013-01-16T16:21:32Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Welcome to the [{{SERVER}}/ JogAmp] wiki. It documents JOGL, JOCL and JOAL, the cross-platform bindings to the OpenGL, OpenCL, and OpenAL APIs.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Getting Started&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Downloading and installing JOGL|Downloading and installing]]&lt;br /&gt;
**[[Jogamp Versioning and Releases|Versioning and Releases]]&lt;br /&gt;
*[[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
*[[Jogamp SCM Repositories|Source Code Repositories]]&lt;br /&gt;
*[[SW Tracking|Tracking Reports]]&lt;br /&gt;
*[{{SERVER}}/chuck/ Build and Test Server]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[How to Contribute|Contribute to JogAmp]]&lt;br /&gt;
*[[Maintainer and Contacts]]&lt;br /&gt;
*[[Jogl FAQ#Bugreports &amp;amp; Testing|Report a bug]]&lt;br /&gt;
**[{{SERVER}}/bugzilla/ Bugzilla]&lt;br /&gt;
*[http://forum.jogamp.org/ Ask a question in the forum]&lt;br /&gt;
*[[chatroom|JogAmp IRC]]&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;JogAmp Modules&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOGL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Jogl Overview|Overview]] [ [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL] ]&lt;br /&gt;
*[[Jogl Tutorial|Tutorial]]&lt;br /&gt;
*[[Jogl FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jogl.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
*[{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOCL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[JOCL Overview|Overview]]&lt;br /&gt;
*[[JOCL Tutorial|Tutorial]]&lt;br /&gt;
*[[JOCL FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jocl.git;a=blob;f=LICENSE License]&lt;br /&gt;
*[{{SERVER}}/deployment/jogamp-next/javadoc/jocl/javadoc/ API Doc]&lt;br /&gt;
*[{{SERVER}}/jocl/doc/HowToBuild.html How to Build JOCL]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOAL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Joal Overview|Overview]]&lt;br /&gt;
*[[Joal Tutorial|Tutorial]]&lt;br /&gt;
*[[Joal FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=joal.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc/ Public], [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc_dev/ Internal] ]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;GlueGen&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[GlueGen_Wiki|Overview]]&lt;br /&gt;
* [{{SERVER}}/git/?p=gluegen.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/javadoc/gluegen/javadoc/ API Doc]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Chatroom&amp;diff=834</id>
		<title>Chatroom</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Chatroom&amp;diff=834"/>
		<updated>2013-01-16T16:21:06Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Note IRC channel and deprecate jabber&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Freenode IRC Channel ==&lt;br /&gt;
&lt;br /&gt;
Visit:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;irc.freenode.net&#039;&#039;&#039;&lt;br /&gt;
: &#039;&#039;&#039;#jogamp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
... with any IRC client.&lt;br /&gt;
&lt;br /&gt;
== Jabber (XMPP) JogAmp Channel (Deprecated) ==&lt;br /&gt;
: &#039;&#039;&#039;url: conference.jabber.org&#039;&#039;&#039;&lt;br /&gt;
: &#039;&#039;&#039;room: jogamp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: We&#039;ve moved to Freenode IRC, the Jabber channel should be considered deprecated...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All you have to do is to create an account on e.g. http://www.jabber.org, http://jabbear.com, .. or take your existing xmpp account and join our channel with the client of your choice.&lt;br /&gt;
Alternatively you could also use a so called &amp;quot;transport server&amp;quot; to join even from a different IM protocol.&lt;br /&gt;
&lt;br /&gt;
== New to XMPP? ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP on wikipedia]&lt;br /&gt;
* [http://xmpp.org/services/ public servers]&lt;br /&gt;
* [http://xmpp.org/xmpp-software/clients/ clients]&lt;br /&gt;
&lt;br /&gt;
== No Client? ==&lt;br /&gt;
* try a web based client like [https://www.jappix.com/ jappix]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=824</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=824"/>
		<updated>2013-01-07T15:06:34Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Captions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;10&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ adb install jp4da-android/target/jp4da-android.apk &lt;br /&gt;
1026 KB/s (2334537 bytes in 2.221s)&lt;br /&gt;
	pkg: /data/local/tmp/jp4da-android.apk&lt;br /&gt;
Success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program running on an ordinary Linux desktop:&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;br /&gt;
&lt;br /&gt;
The program installed on the Android emulator:&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu1.png|The installed application]]&lt;br /&gt;
&lt;br /&gt;
The program running on the Android emulator:&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu2.png|The running application]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=File:Maven-android-emu2.png&amp;diff=823</id>
		<title>File:Maven-android-emu2.png</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=File:Maven-android-emu2.png&amp;diff=823"/>
		<updated>2013-01-07T15:05:42Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: The running jp4da application&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The running jp4da application&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=File:Maven-android-emu1.png&amp;diff=822</id>
		<title>File:Maven-android-emu1.png</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=File:Maven-android-emu1.png&amp;diff=822"/>
		<updated>2013-01-07T15:05:24Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: The installed jp4da application&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The installed jp4da application&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=821</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=821"/>
		<updated>2013-01-07T15:04:58Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Additional images and command line install&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;10&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ adb install jp4da-android/target/jp4da-android.apk &lt;br /&gt;
1026 KB/s (2334537 bytes in 2.221s)&lt;br /&gt;
	pkg: /data/local/tmp/jp4da-android.apk&lt;br /&gt;
Success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu1.png|The installed application]]&lt;br /&gt;
&lt;br /&gt;
[[File:maven-android-emu2.png|The running application]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=820</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=820"/>
		<updated>2013-01-07T15:01:06Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Excluding redundant files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;10&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=819</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=819"/>
		<updated>2013-01-07T13:57:10Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Excluding redundant files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;9&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=815</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=815"/>
		<updated>2013-01-05T14:13:58Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Missed a word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; directory now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=814</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=814"/>
		<updated>2013-01-05T14:13:20Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Missed a word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=813</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=813"/>
		<updated>2013-01-05T01:18:31Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Eliminate commas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression against which the names of each jar file on the classpath will be tested. If a jar file is matched then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=812</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=812"/>
		<updated>2013-01-05T01:16:11Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Missed a word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression, against which the names of each jar file on the classpath will be tested. If a jar file is matched, then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=811</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=811"/>
		<updated>2013-01-05T01:08:16Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Building */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression, against which the names of each jar file on the classpath will be tested. If a jar file is matched, then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:blue.png|Highly complex rendering]]&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=File:Blue.png&amp;diff=810</id>
		<title>File:Blue.png</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=File:Blue.png&amp;diff=810"/>
		<updated>2013-01-05T01:07:18Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Highly complex rendering&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Highly complex rendering&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=809</id>
		<title>Maven And Android</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maven_And_Android&amp;diff=809"/>
		<updated>2013-01-05T01:05:38Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Managing your [http://android.com Android] JOGL projects with [http://maven.apache.org Maven] is, if not effortless, at least not difficult. The following article attempts to describe one method of producing a project that will compile and run unmodified on both Android and ordinary &amp;quot;desktop&amp;quot; systems.&lt;br /&gt;
&lt;br /&gt;
The article presents a [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da demo] that illustrates the organization of a trivial OpenGL application, and covers the rationale and methods behind its construction.&lt;br /&gt;
&lt;br /&gt;
== Maven Modules ==&lt;br /&gt;
&lt;br /&gt;
The intention in this article is to develop an extremely simple OpenGL program that simply clears the screen to a garish colour at sixty frames per second.&lt;br /&gt;
&lt;br /&gt;
Typically, software projects have handled platform-specific code by using some form of conditional compilation. That is, the build system usually contains some sort of &amp;quot;if the current platform is &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt;, then compile &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt;, else compile &amp;lt;tt&amp;gt;B&amp;lt;/tt&amp;gt;&amp;quot; statements. The recommended way to handle this with Maven is to break a project up into separate [http://maven.apache.org/guides/mini/guide-multiple-modules.html modules] so that any platform specific code is isolated and can be enabled or disabled on a per-module basis.&lt;br /&gt;
&lt;br /&gt;
Assuming then that the intention is to get the program to run unmodified on Android and &amp;quot;anything else that can create an OpenGL window&amp;quot;, the first thing that needs to be done is the break the program up into separate parts. Specifically:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Android&amp;quot; frontend (the [http://developer.android.com/reference/android/app/Activity.html Activity], and associated code and classes)&lt;br /&gt;
* The &amp;quot;desktop&amp;quot; frontend (the usual window and context creation code, called from the main procedure in typical programs)&lt;br /&gt;
* The platform-independent OpenGL core&lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
&lt;br /&gt;
Firstly, a simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/pom.xml; POM] file is written that declares three submodules and very little else. As can probably be seen from the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da source browser], each of the modules has a corresponding directory each containing POM files that will be described further on in the article.&lt;br /&gt;
&lt;br /&gt;
This demo project is named &amp;lt;tt&amp;gt;jp4da&amp;lt;/tt&amp;gt;. Prizes won&#039;t be awarded for working out what the acronym means!&lt;br /&gt;
&lt;br /&gt;
== Core ==&lt;br /&gt;
&lt;br /&gt;
The platform-independent part of the program is probably the simplest, and is contained in the [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-core jp4da-core module].&lt;br /&gt;
&lt;br /&gt;
A simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/src/main/java/com/io7m/examples/jp4da/Example.java Example] class that implements [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GLEventListener.html GLEventListener] is all that&#039;s required.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-core/pom.xml POM] file for the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module is very simple, but does have one unusual distinction: The declared dependencies for the project are, at first glance, somewhat lacking. Typically (according to the [http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE#Maven published instructions on setting up a JOGL Maven project]), projects will explicitly depend on the [http://search.maven.org/#search|ga|1|a%3A%22jogl-all-main%22 jogl-all-main] and [http://search.maven.org/#search|ga|1|a%3A%22gluegen-rt-main%22 gluegen-rt-main] packages in order to have Maven automatically retrieve and use the native libraries associated with each project. &lt;br /&gt;
&lt;br /&gt;
The POM file for &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; clearly doesn&#039;t do this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this is simple: Depending on a specific set of native libraries would be implicitly stating that module is intended to run on &#039;&#039;a particular platform&#039;&#039;, as opposed to being platform-independent. Instead, the module essentially just depends on the one JOGL package that will allow the Java compiler to type-check and compile the code, without giving any consideration to how the final application will be constructed. It will also become clear, when describing the Android module, why depending on the native library packages here would be actively harmful!&lt;br /&gt;
&lt;br /&gt;
== Desktop ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-desktop jp4da-desktop module] implements an extremely simple [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/src/main/java/com/io7m/examples/jp4da/DesktopExample.java main program] that opens a NEWT window and runs the event listener implemented in the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-desktop/pom.xml POM file] is similarly unsurprising, and simply declares some dependencies on the native packages that were [[#Core|specifically ignored]] earlier.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven/jp4da/jp4da-android jp4da-android module] implements the Android front-end for the program.&lt;br /&gt;
&lt;br /&gt;
The main [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/src/main/java/com/io7m/examples/jp4da/MainActivity.java Activity] is very similar to the [[#Desktop|desktop]] code: It simply opens a window and instantiates the [[#Core|core&#039;s event listener class]]. None of this code should be particularly surprising to an Android or JOGL programmer.&lt;br /&gt;
&lt;br /&gt;
The [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml POM file] for the project is, however, not quite so simple. The project file attempts to solve three separate problems:&lt;br /&gt;
&lt;br /&gt;
* Process all class files with the various Android tools required to produce [http://en.wikipedia.org/wiki/Dalvik_%28software%29 Dalvik] bytecode&lt;br /&gt;
* Organize the correct dependencies on JOGL itself, excluding &amp;quot;bad&amp;quot; dependencies that Maven implicitly adds.&lt;br /&gt;
* Produce a single [http://en.wikipedia.org/wiki/APK_%28file_format%29 APK] package that follows the correct layout required by JOGL itself and includes all application assets&lt;br /&gt;
&lt;br /&gt;
=== Processing class files ===&lt;br /&gt;
&lt;br /&gt;
Thankfully, as of version 3.5.0, the [http://code.google.com/p/maven-android-plugin/ Android Maven plugin] handles all the necessary processing of class files without requiring any configuration on the part of the developer (apart from, perhaps, setting the &amp;lt;tt&amp;gt;ANDROID_HOME&amp;lt;/tt&amp;gt; environment variable to point to the SDK tools).&lt;br /&gt;
&lt;br /&gt;
With the plugin added to the [http://jogamp.org/git/?p=jogl-demos.git;a=blob;f=maven/jp4da/jp4da-android/pom.xml;#l83 build] section of the POM file, no further configuration is required to process class files.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
For running code on Android, JOGL provides separate &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-android&amp;lt;/tt&amp;gt; jar files. However, this is where the first problem arises due to Maven&#039;s [http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html transitive dependency handling]: The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; project depends on &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; which depends on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; will therefore also implicitly depend on &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt;, which will now conflict with &amp;lt;tt&amp;gt;jogl-all-android&amp;lt;/tt&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
There are two accepted methods to handle this problem:&lt;br /&gt;
&lt;br /&gt;
* Make &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; an [http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#Optional_Dependencies optional dependency] of the &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt; project. It is then the responsibility of &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; to provide a dependency that satisfies all constraints. Or:&lt;br /&gt;
* Have the &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; explicitly ignore the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency of &amp;lt;tt&amp;gt;jp4da-core&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Neither method has any particular advantages or disadvantages in this case, so in the interest of keeping things explicit, the second method was chosen. The &amp;lt;tt&amp;gt;jp4da-android&amp;lt;/tt&amp;gt; module explicitly ignores the &amp;lt;tt&amp;gt;jogl-all&amp;lt;/tt&amp;gt; dependency and provides its own instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.io7m.examples.jp4da&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jp4da-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The jp4da-core project depends on jogl-all in order to type-check/compile,&lt;br /&gt;
        and therefore will be added as a transitive dependency of this project. However,&lt;br /&gt;
        this is an Android package and wants to use the Android JOGL package. Obviously,&lt;br /&gt;
        it&#039;s not possible to use both, so this exclusion tells Maven that the dependency&lt;br /&gt;
        introduced by jp4da-core on JOGL should be ignored.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;exclusions&amp;gt;&lt;br /&gt;
        &amp;lt;exclusion&amp;gt;&lt;br /&gt;
          &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
          &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;/exclusion&amp;gt;&lt;br /&gt;
      &amp;lt;/exclusions&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;com.google.android&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.6_r2&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Depend on the gluegen runtime Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the jogl Android package --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Depend on the correct natives for Android --&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Producing an APK ===&lt;br /&gt;
&lt;br /&gt;
Finally, it&#039;s necessary to actually produce an APK that can be installed onto devices.&lt;br /&gt;
&lt;br /&gt;
The project as described so far will not work when installed, both because JOGL requires that certain files appear in specific places inside the APK and because native libraries have not been placed in the correct directory to be packaged. Additionally, the Android Maven plugin will, by default, include everything that isn&#039;t a class file from every dependency jar on the classpath into the final APK.&lt;br /&gt;
&lt;br /&gt;
=== Excluding redundant files ===&lt;br /&gt;
&lt;br /&gt;
So, firstly, the Android Maven plugin needs to be told not to include anything from the JOGL and GlueGen jar files. This is achieved by giving a regular expression, against which the names of each jar file on the classpath will be tested. If a jar file is matched, then the contents of the jar file are &#039;&#039;not&#039;&#039; included in the resulting APK. Essentially, specific jar files are blacklisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        The default behaviour for the Android Maven plugin is to&lt;br /&gt;
        attempt to include everything that isn&#039;t a class file from every&lt;br /&gt;
        dependency jar. Because we already manually included the assets&lt;br /&gt;
        and native libraries using the &amp;quot;dependency&amp;quot; plugin above, it&#039;s&lt;br /&gt;
        necessary to tell the Android Maven plugin to exclude the jar&lt;br /&gt;
        files matching the given patterns from the inclusion process.&lt;br /&gt;
&lt;br /&gt;
        This saves roughly 4mb of redundant files from being included&lt;br /&gt;
        in the final APK, at the time of writing.&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;com.jayway.maven.plugins.android.generation2&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;android-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;sdk&amp;gt;&lt;br /&gt;
            &amp;lt;platform&amp;gt;8&amp;lt;/platform&amp;gt;&lt;br /&gt;
          &amp;lt;/sdk&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;apk&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;excludeJarResources&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;jogl-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
                &amp;lt;excludeJarResource&amp;gt;gluegen-rt-.*\.jar$&amp;lt;/excludeJarResource&amp;gt;&lt;br /&gt;
              &amp;lt;/excludeJarResources&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copying assets and native libraries ===&lt;br /&gt;
&lt;br /&gt;
Then, the standard [http://maven.apache.org/plugins/maven-dependency-plugin/ Maven dependency plugin] is used to unpack assets into the &amp;lt;tt&amp;gt;assets&amp;lt;/tt&amp;gt; directory (so that the Android Maven plugin can find and process them), and also to unpack and place native libraries into the correct &amp;lt;tt&amp;gt;libs&amp;lt;/tt&amp;gt; directory (again, so that the Android Maven plugin can find and process them).&lt;br /&gt;
&lt;br /&gt;
The process is simple, and nothing that should be surprising to any reasonably experienced Maven user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.6&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;executions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the JOGL assets --&amp;gt;&lt;br /&gt;
          &amp;lt;!-- In other words, copy anything from the jar file that isn&#039;t a class file --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-jogl-assets&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;jogl-all-android&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/assets&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;excludes&amp;gt;**/*.class&amp;lt;/excludes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!-- Unpack the GlueGen natives --&amp;gt;&lt;br /&gt;
          &amp;lt;execution&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;unpack-gluegen-natives&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;
            &amp;lt;goals&amp;gt;&lt;br /&gt;
              &amp;lt;goal&amp;gt;unpack&amp;lt;/goal&amp;gt;&lt;br /&gt;
            &amp;lt;/goals&amp;gt;&lt;br /&gt;
            &amp;lt;configuration&amp;gt;&lt;br /&gt;
              &amp;lt;artifactItems&amp;gt;&lt;br /&gt;
                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;
                  &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
                  &amp;lt;artifactId&amp;gt;gluegen-rt&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
                  &amp;lt;version&amp;gt;2.0-rc11post03&amp;lt;/version&amp;gt;&lt;br /&gt;
                  &amp;lt;classifier&amp;gt;natives-android-armv6&amp;lt;/classifier&amp;gt;&lt;br /&gt;
                  &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;
                  &amp;lt;outputDirectory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
                  &amp;lt;includes&amp;gt;lib*.so&amp;lt;/includes&amp;gt;&lt;br /&gt;
                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;
              &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;
            &amp;lt;/configuration&amp;gt;&lt;br /&gt;
          &amp;lt;/execution&amp;gt;&lt;br /&gt;
        &amp;lt;/executions&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning up ===&lt;br /&gt;
&lt;br /&gt;
Finally, because the project has performed some rather non-standard (from the perspective of typical Maven usage) operations, it&#039;s good practice to use the [http://maven.apache.org/plugins/maven-clean-plugin/ Maven Clean plugin] to clean up the manually unpacked files so that each build always starts from a completely clean slate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
        Next, because there have been files unpacked to non-standard&lt;br /&gt;
        locations, it&#039;s necessary to tell the &amp;quot;clean&amp;quot; plugin to delete&lt;br /&gt;
        the unpacked files (for the sake of keeping things tidy).&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;plugin&amp;gt;&lt;br /&gt;
        &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
        &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;
        &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;filesets&amp;gt;&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/libs/armeabi&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libgluegen-rt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libnewt.so&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;libjogl_mobile.so&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!--&lt;br /&gt;
              Note that if you don&#039;t use the &amp;quot;assets&amp;quot; directory&lt;br /&gt;
              for anything else in your project, you can probably&lt;br /&gt;
              just delete the whole thing, rather than picking&lt;br /&gt;
              things carefully in the manner shown here.&lt;br /&gt;
              --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;fileset&amp;gt;&lt;br /&gt;
              &amp;lt;directory&amp;gt;${project.basedir}/assets&amp;lt;/directory&amp;gt;&lt;br /&gt;
              &amp;lt;includes&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;META-INF/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;com/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogl/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;jogamp/**&amp;lt;/include&amp;gt;&lt;br /&gt;
                &amp;lt;include&amp;gt;javax/**&amp;lt;/include&amp;gt;&lt;br /&gt;
              &amp;lt;/includes&amp;gt;&lt;br /&gt;
              &amp;lt;followSymlinks&amp;gt;false&amp;lt;/followSymlinks&amp;gt;&lt;br /&gt;
            &amp;lt;/fileset&amp;gt;&lt;br /&gt;
          &amp;lt;/filesets&amp;gt;&lt;br /&gt;
        &amp;lt;/configuration&amp;gt;&lt;br /&gt;
      &amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
Running a build from the main project directory should proceed without issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mvn -C clean verify&lt;br /&gt;
[INFO] Scanning for projects...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Build Order:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core&lt;br /&gt;
[INFO] jp4da-desktop&lt;br /&gt;
[INFO] jp4da-android&lt;br /&gt;
[INFO] jp4da&lt;br /&gt;
...&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Reactor Summary:&lt;br /&gt;
[INFO] &lt;br /&gt;
[INFO] jp4da-core ........................................ SUCCESS [1.905s]&lt;br /&gt;
[INFO] jp4da-desktop ..................................... SUCCESS [0.658s]&lt;br /&gt;
[INFO] jp4da-android ..................................... SUCCESS [21.129s]&lt;br /&gt;
[INFO] jp4da ............................................. SUCCESS [0.001s]&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] BUILD SUCCESS&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
[INFO] Total time: 24.688s&lt;br /&gt;
[INFO] Finished at: Fri Jan 04 23:06:47 GMT 2013&lt;br /&gt;
[INFO] Final Memory: 22M/236M&lt;br /&gt;
[INFO] ------------------------------------------------------------------------&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;jp4da-android/target&amp;lt;/tt&amp;gt; now contains a &amp;lt;tt&amp;gt;jp4da-android.apk&amp;lt;/tt&amp;gt; file that can be installed onto devices or the Android emulator.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=803</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=803"/>
		<updated>2012-11-26T13:01:12Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* The jogamp.org test repository (optional) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogl Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Please note that packages on the jogamp test repository are subject to unannounced changes at any moment and may break existing code at any time! Do not use for production code!&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=798</id>
		<title>Maintainer and Contacts</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Maintainer_and_Contacts&amp;diff=798"/>
		<updated>2012-11-15T17:27:45Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Add myself!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Maintainer =&lt;br /&gt;
&lt;br /&gt;
* Gluegen&lt;br /&gt;
** Sven Gothel&lt;br /&gt;
* JOAL&lt;br /&gt;
** Xerxes Rånby&lt;br /&gt;
* JOGL&lt;br /&gt;
** Sven Gothel&lt;br /&gt;
* JOCL&lt;br /&gt;
** Sven Gothel &#039;&#039;(interim)&#039;&#039;&lt;br /&gt;
* Art&lt;br /&gt;
** Dominik Ströhlein&lt;br /&gt;
* Engine Support&lt;br /&gt;
** Julien Gouesse&lt;br /&gt;
* Maven packages&lt;br /&gt;
** Mark Raynsford&lt;br /&gt;
* &#039;&#039;Open Positions&#039;&#039;&lt;br /&gt;
** JOCL&lt;br /&gt;
** jogl-utils&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
&lt;br /&gt;
You can address the JogAmp Community via:&lt;br /&gt;
* [http://jogamp.org/ Web]&lt;br /&gt;
* [http://forum.jogamp.org/ Forum/Mailinglist]&lt;br /&gt;
* JogAmp Channel&lt;br /&gt;
** server: conference.jabber.org room: jogamp&lt;br /&gt;
* Email&lt;br /&gt;
** mediastream [@] jogamp.org&lt;br /&gt;
&lt;br /&gt;
You may also contact Individuals via:&lt;br /&gt;
* Sven Gothel&lt;br /&gt;
** sgothel [@] jausoft.com&lt;br /&gt;
** http://jausoft.com/blog/tag/jogl/&lt;br /&gt;
* Julien Gouesse&lt;br /&gt;
** gouessej [@] orange.fr&lt;br /&gt;
** http://gouessej.wordpress.com/tag/jogl/&lt;br /&gt;
* Xerxes Rånby&lt;br /&gt;
** xerxes [@] gudinna.com&lt;br /&gt;
** http://labb.zafena.se/?category_name=jogamp&lt;br /&gt;
** http://twitter.com/xranby&lt;br /&gt;
* Mark Raynsford&lt;br /&gt;
** http://io7m.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have commercial support requests&amp;lt;br&amp;gt;&lt;br /&gt;
please feel free to contact the module maintainer.&lt;br /&gt;
&lt;br /&gt;
We are confident to make your JogAmp experience a successful story.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=794</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=794"/>
		<updated>2012-11-11T21:10:28Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Re-add old jogamp repository instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogl Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
As an example, if your project uses JOGL &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
=== The jogamp.org test repository (optional) ===&lt;br /&gt;
&lt;br /&gt;
Bleeding edge, experimental packages will continue to be made available from the&lt;br /&gt;
[http://jogamp.org/deployment/maven Jogamp Test Repository]. Most users won&#039;t need this, but&lt;br /&gt;
it can be used by adding a new profile in your &amp;lt;tt&amp;gt;~/.m2/settings.xml&amp;lt;/tt&amp;gt; file that specifies&lt;br /&gt;
the repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;settings&lt;br /&gt;
    xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot; &lt;br /&gt;
    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
    xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
    &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;
      &amp;lt;activeProfile&amp;gt;jogamp&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;
    &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will then check this repository for packages in addition to Maven Central when resolving dependencies.&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=793</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=793"/>
		<updated>2012-11-02T14:27:59Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Maven central!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). As of &amp;lt;tt&amp;gt;2.0-rc11&amp;lt;/tt&amp;gt;, packages are pushed to &lt;br /&gt;
[http://search.maven.org/#search|ga|1|jogl Maven Central].&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc11&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=774</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=774"/>
		<updated>2012-09-28T11:42:04Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains experimental support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). Right now, a test repository is available at&lt;br /&gt;
http://jogamp.org/deployment/maven.&lt;br /&gt;
&lt;br /&gt;
=== Add the test repository to your &amp;lt;tt&amp;gt;$HOME/.m2/settings.xml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Add a new repository by adding a new profile (called &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; here, but you can obviously&lt;br /&gt;
pick your own name if you like):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;settings&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;activation&amp;gt;&lt;br /&gt;
          &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; &amp;lt;!-- change this to false, if you don&#039;t like to have it on per default --&amp;gt;&lt;br /&gt;
        &amp;lt;/activation&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eventually, the &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; artifacts will be pushed to the Central Repository and this step will become unnecessary.&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc10&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc10&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=734</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=734"/>
		<updated>2012-06-27T21:06:14Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Add a dependency on jogl-all-main and gluegen-rt-main to your project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains experimental support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). Right now, a test repository is available at&lt;br /&gt;
http://jogamp.org/deployment/maven.&lt;br /&gt;
&lt;br /&gt;
=== Add the test repository to your &amp;lt;tt&amp;gt;$HOME/.m2/settings.xml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Add a new repository by adding a new profile (called &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; here, but you can obviously&lt;br /&gt;
pick your own name if you like):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;settings&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;activation&amp;gt;&lt;br /&gt;
          &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; &amp;lt;!-- change this to false, if you don&#039;t like to have it on per default --&amp;gt;&lt;br /&gt;
        &amp;lt;/activation&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eventually, the &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; artifacts will be pushed to the Central Repository and this step will become unnecessary.&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
An example project is available in the &amp;lt;tt&amp;gt;maven&amp;lt;/tt&amp;gt; subdirectory of the &amp;lt;tt&amp;gt;jogl-demos&amp;lt;/tt&amp;gt; project&lt;br /&gt;
[http://jogamp.org/git/?p=jogl-demos.git;a=tree;f=maven].&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=733</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=733"/>
		<updated>2012-06-27T21:03:22Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: /* Add the test repository to your $HOME/.m2/settings.xml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains experimental support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). Right now, a test repository is available at&lt;br /&gt;
http://jogamp.org/deployment/maven.&lt;br /&gt;
&lt;br /&gt;
=== Add the test repository to your &amp;lt;tt&amp;gt;$HOME/.m2/settings.xml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Add a new repository by adding a new profile (called &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; here, but you can obviously&lt;br /&gt;
pick your own name if you like):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;settings&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;activation&amp;gt;&lt;br /&gt;
          &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; &amp;lt;!-- change this to false, if you don&#039;t like to have it on per default --&amp;gt;&lt;br /&gt;
        &amp;lt;/activation&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eventually, the &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; artifacts will be pushed to the Central Repository and this step will become unnecessary.&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=732</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=732"/>
		<updated>2012-06-27T21:01:54Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains experimental support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). Right now, a test repository is available at&lt;br /&gt;
http://jogamp.org/deployment/maven.&lt;br /&gt;
&lt;br /&gt;
=== Add the test repository to your &amp;lt;tt&amp;gt;$HOME/.m2/settings.xml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Add a new repository by adding a new profile (called &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; here, but you can obviously&lt;br /&gt;
pick your own name if you like):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;settings&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;activation&amp;gt;&lt;br /&gt;
          &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; &amp;lt;!-- change this to false, if you don&#039;t like to have it on per default --&amp;gt;&lt;br /&gt;
        &amp;lt;/activation&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=731</id>
		<title>Setting up a JogAmp project in your favorite IDE</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Setting_up_a_JogAmp_project_in_your_favorite_IDE&amp;diff=731"/>
		<updated>2012-06-27T21:00:15Z</updated>

		<summary type="html">&lt;p&gt;Mraynsford: Add initial maven instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
These instructions assume that you&#039;ve created a project in your favorite IDE, and now you want your project to be able to use a JogAmp library like JOGL, JOCL, JOAL, or GlueGen. We use JOGL as an example below, but these instructions work equally well for any other JogAmp library.&lt;br /&gt;
&lt;br /&gt;
= Download a JogAmp library =&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done so already, download and extract the JogAmp library you want to use. For example, to download and extract JOGL, see the instructions at [[Downloading and installing JOGL]].&lt;br /&gt;
&lt;br /&gt;
To use a JogAmp library you&#039;ll do three things:&lt;br /&gt;
&lt;br /&gt;
* Add its JAR files to the Java classpath&lt;br /&gt;
* Add its native libraries in one of two ways:&lt;br /&gt;
** Either place its native JAR files in the same directory as the library JAR files&lt;br /&gt;
** Or add its native library files(the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;.jnilib&amp;lt;/tt&amp;gt; files) to the Java library path&lt;br /&gt;
* Optional: Associate the *-java-src.zip files with the corresponding JAR files.&lt;br /&gt;
&lt;br /&gt;
Each IDE has a slightly different way to do these things, as we show below. Using the native JAR files is usually slightly easier than using the native library files directly, and native JARs make it possible for all platforms&#039; libraries to coexist in one project, so this is the recommended method.&lt;br /&gt;
&lt;br /&gt;
Please note that all JogAmp libraries depend on the GlueGen runtime libraries. These are included in every JogAmp library for convenience, but are only required once in the classpath and library path of your project.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE project =&lt;br /&gt;
&lt;br /&gt;
Probably the simplest way to use JOGL in an Eclipse project is to create another Eclipse project to contain the JOGL JARs, then make your project depend on this new JOGL project. In the example below, I include only the 64-bit Windows native JARs, but you can put native JARs for as many platforms as you wish together into the JOGL Eclipse project.&lt;br /&gt;
&lt;br /&gt;
=== Create a JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Put all the JOGL code JARs, native JARs for all platforms you wish to support, and source ZIP files in a directory called &amp;quot;JOGL&amp;quot; in your workspace directory.&lt;br /&gt;
* Click &amp;quot;File &amp;gt; New &amp;gt; Java Project&amp;quot;. Type &amp;quot;JOGL&amp;quot; as the project name and click &amp;quot;Next&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_01_create_project.png|300px|thumb|none|Create JOGL project]]&lt;br /&gt;
* Click the &amp;quot;Libraries&amp;quot; tab, select the native JARs, and click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_02_remove_native_JARs.png|300px|thumb|none|Remove native JARs]]&lt;br /&gt;
* Expand the remaining JARs. For each of them, double-click &amp;quot;Source attachment&amp;quot;, click &amp;quot;Workspace...&amp;quot;, navigate to the corresponding &amp;lt;tt&amp;gt;*-java-src.zip&amp;lt;/tt&amp;gt; file in the project, select it, click &amp;quot;OK&amp;quot;, and click &amp;quot;OK&amp;quot; again to dismiss the &amp;quot;Source Attachment Configuration&amp;quot; dialog. The JARs should look like this when you&#039;re done:&lt;br /&gt;
[[File:Eclipse_project_setup_03_JARs_with_source_attached.png|300px|thumb|none|Attach source to JARs]]&lt;br /&gt;
* Click the &amp;quot;Order and Export&amp;quot; tab. Check both JOGL JARs, then click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_project_setup_04_order_and_export.png|300px|thumb|none|Exporting JOGL JARs]]&lt;br /&gt;
&lt;br /&gt;
=== Add dependency on the JOGL project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select the &amp;quot;Java Build Path&amp;quot; on the left, then click the &amp;quot;Projects&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;Add...&amp;quot; button, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
* Your dependent project should look like this. Click &amp;quot;OK&amp;quot; to dismiss the &amp;quot;Properties&amp;quot; dialog.&lt;br /&gt;
[[File:Eclipse_project_setup_05_project_dependency.png|300px|thumb|none|JOGL project dependency]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Your project can now use the library.&lt;br /&gt;
&lt;br /&gt;
= Eclipse IDE user library =&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to put JOGL in a separate Eclipse project, you can put it in a user library instead. The drawback to this is that the user library is defined in your .metadata directory and contains absolute paths, so it&#039;s hard to share with others. But for a non-shared project this works fine.&lt;br /&gt;
&lt;br /&gt;
=== Create a user library ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Window &amp;gt; Preferences&amp;quot;, then select &amp;quot;Java &amp;gt; Build Path &amp;gt; User Libraries&amp;quot; on the left.&lt;br /&gt;
* Click the &amp;quot;New...&amp;quot; button, type &amp;quot;JOGL&amp;quot; for the library name, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_01_create_user_library.png|300px|thumb|none|Create user library]]&lt;br /&gt;
* Click the &amp;quot;Add JARs...&amp;quot; button, navigate to the directory where you&#039;ve stored the JARs, select all the non-native JARs, then click &amp;quot;Open&amp;quot;.&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Expand each non-native JAR in the list&lt;br /&gt;
** Double-click &amp;quot;Source attachment&amp;quot;, type the module&#039;s source zip name, (e.g. &amp;lt;tt&amp;gt;jogl-java-src.zip&amp;lt;/tt&amp;gt; for the JAR file &amp;lt;tt&amp;gt;jogl.all.jar&amp;lt;/tt&amp;gt;), and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
** If you&#039;re using native library files:&lt;br /&gt;
*** Double-click &amp;quot;Native library location&amp;quot;, type the directory where native library files are stored, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_02_set_native_library_locations.png|300px|thumb|none|Set native library locations]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to exit Preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Add the user library to your project&#039;s dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project in the Package Explorer and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Java Build Path&amp;quot; and click the &amp;quot;Libraries&amp;quot; tab.&lt;br /&gt;
[[File:Eclipse_setup_03_add_library_to_project.png|300px|thumb|none|Add library to project]]&lt;br /&gt;
* Click &amp;quot;Add Library...&amp;quot;, select &amp;quot;User Library&amp;quot;, click &amp;quot;Next&amp;quot;, check &amp;quot;JOGL&amp;quot;, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
[[File:Eclipse_setup_04_add_JOGL_library_to_project.png|300px|thumb|none|Add JOGL library to project]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= IntelliJ IDEA =&lt;br /&gt;
=== Add a library dependency to your project ===&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;File &amp;gt; Project Structure&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Modules&amp;quot; on the left, then click the &amp;quot;Dependencies&amp;quot; tab on the right.&lt;br /&gt;
* Click the &amp;quot;+&amp;quot; button on the right, then select &amp;quot;Library... &amp;gt; Java&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_01_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Navigate to the directory where you extracted the JARs, select it, and click &amp;quot;OK&amp;quot;.&lt;br /&gt;
[[File:IntelliJ_setup_02_find_library.png|300px|thumb|none|Find library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Configure Library dialog.&lt;br /&gt;
[[File:IntelliJ_setup_03_configure_library.png|300px|thumb|none|Configure library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Structure dialog. The external libraries in your project should now look like this if you&#039;re using native JAR files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library_native_JARs.png|300px|thumb|none|Native JARs]]&lt;br /&gt;
or like this if you&#039;re using native library files:&lt;br /&gt;
[[File:IntelliJ_setup_04_external_library.png|300px|thumb|none|Native library files]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Edit Configurations&amp;quot;.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Parameters&amp;quot; box. Note that paths with spaces must be double-quoted on Windows.&lt;br /&gt;
[[File:IntelliJ_setup_05_run_configuration.png|300px|thumb|none|Edit run configuration]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Run/Debug Configurations dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= NetBeans IDE = &lt;br /&gt;
=== Create a library and add it to your project ===&lt;br /&gt;
&lt;br /&gt;
* Right-click your project and click &amp;quot;Properties&amp;quot;.&lt;br /&gt;
* Select &amp;quot;Libraries&amp;quot; on the left and click &amp;quot;Add Library...&amp;quot;.&lt;br /&gt;
* Click the &amp;quot;Create&amp;quot; button, then type &amp;quot;JOGL&amp;quot; for the library name and click &amp;quot;OK&amp;quot;.[[File:NetBeans_setup_01_create_library.png|300px|thumb|none|Create library]]&lt;br /&gt;
* Click &amp;quot;Add JAR/Folder...&amp;quot;, then navigate to the directory you extracted the JAR files, select them and click &amp;quot;Add JAR/Folder&amp;quot;.&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Customize Library dialog.&lt;br /&gt;
* Click &amp;quot;Add Library&amp;quot; to dismiss the Add Library dialog.[[File:NetBeans_setup_02_add_library.png|300px|thumb|none|Add library]]&lt;br /&gt;
* Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog. The libraries in your project should look like this.[[File:NetBeans_setup_03_libraries_in_project.png|300px|thumb|none|Libraries in project]]&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using native JAR files:&lt;br /&gt;
** Make sure the &amp;lt;tt&amp;gt;gluegen-rt-natives-*-*.jar&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jogl-all-natives-*-*.jar&amp;lt;/tt&amp;gt; files for each platform you want to run on are in the same directory as the other JAR files. The native JAR files don&#039;t need to be added to the classpath.&lt;br /&gt;
* Otherwise, if you&#039;re using native library files:&lt;br /&gt;
** Click &amp;quot;Run &amp;gt; Set Project Configuration &amp;gt; Customize...&amp;quot;. Select &amp;quot;Run&amp;quot; on the left if it isn&#039;t selected already.&lt;br /&gt;
** Type &amp;lt;tt&amp;gt;-Djava.library.path=your/path/to/native/library/files&amp;lt;/tt&amp;gt; in the &amp;quot;VM Options&amp;quot; box.&lt;br /&gt;
** NOTE: If the library path has spaces in it, you must put quotes around it (at least on Windows) or you may get an odd NoClassDefFoundError when you try to run.[[File:NetBeans_setup_04_native_library_path.png|300px|thumb|none|Native library path]]&lt;br /&gt;
** Click &amp;quot;OK&amp;quot; to dismiss the Project Properties dialog.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;br /&gt;
&lt;br /&gt;
= Maven =&lt;br /&gt;
&lt;br /&gt;
Jogamp now contains experimental support for Maven, for the &amp;lt;tt&amp;gt;jogl&amp;lt;/tt&amp;gt; components (&amp;lt;tt&amp;gt;jocl&amp;lt;/tt&amp;gt;&lt;br /&gt;
and &amp;lt;tt&amp;gt;joal&amp;lt;/tt&amp;gt; support is forthcoming). Right now, a test repository is available at&lt;br /&gt;
[http://jogamp.org/deployment/maven|http://jogamp.org/deployment/maven].&lt;br /&gt;
&lt;br /&gt;
=== Add the test repository to your &amp;lt;tt&amp;gt;$HOME/.m2/settings.xml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Add a new repository by adding a new profile (called &amp;lt;tt&amp;gt;jogamp&amp;lt;/tt&amp;gt; here, but you can obviously&lt;br /&gt;
pick your own name if you like):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;settings&amp;gt;&lt;br /&gt;
    &amp;lt;profiles&amp;gt;&lt;br /&gt;
      &amp;lt;profile&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;jogamp&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;activation&amp;gt;&lt;br /&gt;
          &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; &amp;lt;!-- change this to false, if you don&#039;t like to have it on per default --&amp;gt;&lt;br /&gt;
        &amp;lt;/activation&amp;gt;&lt;br /&gt;
        &amp;lt;repositories&amp;gt;&lt;br /&gt;
          &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;jogamp-remote&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;jogamp test mirror&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://www.jogamp.org/deployment/maven/&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;
          &amp;lt;/repository&amp;gt;&lt;br /&gt;
        &amp;lt;/repositories&amp;gt;&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;/settings&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a dependency on &amp;lt;tt&amp;gt;jogl-all-main&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;gluegen-rt-main&amp;lt;/tt&amp;gt; to your project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.gluegen&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;gluegen-rt-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;org.jogamp.jogl&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;jogl-all-main&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;2.0-rc9&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maven will pull all of the dependencies the next time you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
= vi and other text editors =&lt;br /&gt;
=== Create your project with the editor of your choice ===&lt;br /&gt;
* For example, to open vi, simply type &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt; and press &amp;lt;return&amp;gt;.&lt;br /&gt;
* Type all your code, then save it.&lt;br /&gt;
&lt;br /&gt;
=== Compile and run your project from the command line ===&lt;br /&gt;
* We assume your JOGL JAR files are in a directory called &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs, we assume they&#039;re also in the &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; directory. If you&#039;re using native library files, we assume they&#039;re in a directory called &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* First compile your program. We assume all your code is in a single file called &amp;lt;tt&amp;gt;name/someone/MyProject.java&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar&amp;quot; name\someone\MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;javac -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar&amp;quot; name/someone/MyProject.java&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then run your project. We assume your main class is &amp;lt;tt&amp;gt;name.someone.MyProject&amp;lt;/tt&amp;gt;. If you&#039;re using native JARs:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
* If you&#039;re using native library files:&lt;br /&gt;
** Windows: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar\gluegen-rt.jar;jar\jogl.all.jar;.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Linux/MacOS X: Type &amp;lt;tt&amp;gt;java -classpath &amp;quot;jar/gluegen-rt.jar:jar/jogl.all.jar:.&amp;quot; -Djava.library.path=lib name.someone.MyProject&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! You can now use the library in your project.&lt;/div&gt;</summary>
		<author><name>Mraynsford</name></author>
	</entry>
</feed>