<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License. 
-->
<html lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Apache Olingo provides libraries which enable developers to implement OData producers and OData consumers. The available OData Java library implements OData version 2.0. In future on goal is to provide an OData 4.0 compliant library once the OData standard is published at OASIS. The focus within the community is currently on the Java technology but it is up to the community to discuss if other environments find interest.">
    <meta name="author" content="">
    <link rel="icon" href="/favicon.ico">
    <title>Apache Olingo Library</title>
    <!-- Bootstrap core CSS -->
    <link href="/css/bootstrap.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
    <link href="/css/navbar.css" rel="stylesheet" type="text/css"><!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <link href="/css/offcanvas.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
    <link rel="stylesheet" href="/css/main.css">
    <!--[if lt IE 9]><script src="/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <style>
.headerlink {
  visibility: hidden;
}
dt:hover > .headerlink, p:hover > .headerlink, td:hover > .headerlink, h1:hover > .headerlink, h2:hover > .headerlink, h3:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, h6:hover > .headerlink {
  visibility: visible
}    </style>
    <script src="/js/ie-emulation-modes-warning.js" type="text/javascript">
</script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->

    <script src="/js/ie10-viewport-bug-workaround.js" type="text/javascript">
</script><!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="/js/html5shiv.min.js"></script>
      <script src="/js/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>
    <div class="container">
      <!-- Static navbar -->
      <div class="navbar navbar-default" role="navigation">
        <div class="container-fluid">
          <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
              <span class="sr-only">Toggle navigation</span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
            </button>
              <img class="navbar-brand" src="/img/OlingoOrangeTM.png" style="width:62px;" >
              <a class="navbar-brand" href="/">Apache Olingo™</a>
          </div>
          <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
              <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                      <li><a href="http://www.apache.org/foundation/">ASF Home</a></li>
                      <li><a href="http://projects.apache.org/">Projects</a></li>
                      <li><a href="http://people.apache.org/">People</a></li>
                      <li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a></li>
                      <li><a href="http://www.apache.org/dyn/closer.cgi">Download</a></li>
                      <li><a href="http://www.apache.org/security/">Security</a></li>
                      <li><a href="http://www.apache.org/foundation/sponsorship.html">Support Apache</a></li>
                  </ul>
              </li>

              <li><a href="http://www.apache.org/licenses/">License</a></li>

              <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                      <li><a href="/doc/odata2/download.html">Download OData 2.0 Java</a></li>
                      <li><a href="/doc/odata4/download.html">Download OData 4.0 Java</a></li>
                      <li><a href="/doc/javascript/download.html">Download OData 4.0 JavaScript</a></li>
                  </ul>
              </li>

              <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li><a href="/doc/odata2/index.html">Documentation OData 2.0 Java</a></li>
                    <li><a href="/doc/odata4/index.html">Documentation OData 4.0 Java</a></li>
                    <li><a href="/doc/javascript/index.html">Documentation OData 4.0 JavaScript</a></li>
                  </ul>
              </li>
              <li><a href="/support.html">Support</a></li>
              <li><a href="/contribute.html">Contribute</a></li>

            </ul>

			  <a class="navbar-right" href="http://www.apache.org/foundation/" target="_blank">
          <img class="navbar-right" height="50px" src="/img/asf_logo_url.svg" alt="Apache Software Foundation">
        </a>

			</div><!--/.nav-collapse -->
        </div><!--/.container-fluid -->
      </div><!-- Main component for a primary marketing message or call to action -->
    <h1 id="sample-project-setup">Sample Project Setup<a class="headerlink" href="#sample-project-setup" title="Permalink">&para;</a></h1>
<p>Olingo has prepared a very simple sample car service that can work as a starting point for implementing a custom OData service.
This service consists of a very simple EDM with two entity sets that are cars and manufactures and a memory based data provider that is a simple hash map.
Therefore the project implements a very basic single OData processor supporting a minimal readonly scenario.
If build with Maven the build result is a web application (<code>war</code> file) which can be deployed to any JEE compliant web application server (e.g. <a href="http://tomcat.apache.org">Tomcat</a>).</p>
<hr/>
<h3 id="maven-archetype">Maven Archetype<a class="headerlink" href="#maven-archetype" title="Permalink">&para;</a></h3>
<p>Apache Olingo supports Maven archetypes that are a kind of project template for setting up new projects from scratch.
Currently exists an archetype with an <code>ODataSingleProcessor</code> implementation as <code>olingo-odata2-sample-cars-service-archetype</code> and an archetype with an annotation based <code>ODataService</code> implementation as <code>olingo-odata2-sample-cars-annotation-archetype</code>.</p>
<p>To generate the sample project for the <code>ODataSingleProcessor</code> implementation start with:</p>
<pre><code>mvn archetype:generate \
  -DinteractiveMode=false \
  -Dversion=1.0.0-SNAPSHOT \
  -DgroupId=com.sample \
  -DartifactId=my-car-service \
  -DarchetypeGroupId=org.apache.olingo \
  -DarchetypeArtifactId=olingo-odata2-sample-cars-service-archetype \
  -DarchetypeVersion=RELEASE
</code></pre>
<p>To generate the sample project for the <code>ODataService</code>  implementation with use of the Java Annotations extension start with:</p>
<pre><code>mvn archetype:generate \
  -DinteractiveMode=false \
  -Dversion=1.0.0-SNAPSHOT \
  -DgroupId=com.sample \
  -DartifactId=my-car-service \
  -DarchetypeGroupId=org.apache.olingo \
  -DarchetypeArtifactId=olingo-odata2-sample-cars-annotation-archetype \
  -DarchetypeVersion=RELEASE
</code></pre>
<p>If an archetype is not available via Maven standard configuration then an additional parameter <code>-DarchetypeRepository=http://repository.apache.org/snapshots</code> can solve the issue.</p>
<p>Based on the Olingo project template Maven will generate a new project with the specified GAV*) coordinates: <code>com.sample:my-car-service:1.0.0-SNAPSHOT</code>.
GAV coordinates can be freely chosen during generation with the interactive mode. To enable the interactive mode <code>-DinteractiveMode</code> must be set to true or omitted (to use Maven default setting of <code>true</code>).</p>
<p>The result is a new and ready to build Maven project. Switch to <em>my-car-service</em> directory and execute:</p>
<pre><code>mvn clean install
</code></pre>
<p>If a Apache Olingo dependency is not available via Maven standard configuration than adding the Apache Maven Repository (or in case you want to use SNAPSHOTS the Apache Snapshot Repository) into your Maven <code>settings.xml</code> or the <code>pom.xml</code> of this project can solve the issue.</p>
<pre><code class="language-xml">     &hellip;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;apache.central&lt;/id&gt;
          &lt;name&gt;Central Repository&lt;/name&gt;
          &lt;url&gt;http://repo.maven.apache.org/maven2&lt;/url&gt;
        &lt;/repository&gt;

        &lt;repository&gt;
          &lt;id&gt;apache.snapshots&lt;/id&gt;
          &lt;name&gt;Apache SNAPSHOT Repository&lt;/name&gt;
          &lt;url&gt;https://repository.apache.org/content/repositories/snapshots/&lt;/url&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
    &hellip;
</code></pre>
<p>Maven will build the project with the result <strong>car-service.war</strong> in the Maven <em>target</em> directory which can be deployed to any JEE compliant web application server.
To call the deployed and running OData service enter this URI in a browser:</p>
<pre><code>http://localhost:8080/my-car-service/
</code></pre>
<p>Which show a entry page for the generated sample service with links to the <em>Metadata</em> (<code>$metadata</code>), <em>Service Document</em> and some <em>sample data</em> which it provides.</p>
<p>*) GAV means a Maven groupId, artifactId and version.</p>
<h3 id="eclipse-ide-support">Eclipse IDE Support<a class="headerlink" href="#eclipse-ide-support" title="Permalink">&para;</a></h3>
<p>The archetype template supports Eclipse as IDE.
Additionally to a Maven clean and install it is possible to call the following Maven goal:</p>
<pre><code>mvn eclipse:clean eclipse:eclipse
</code></pre>
<p>This will generate Eclipse project files including all transitive dependencies and the web application facet.
Import the project to Eclipse and it should be recognized as a web application project.
Deploy the Eclipse project to a server and it should run as well.</p>

      <div align="center">
	<p>Copyright © 2013-2022, The Apache Software Foundation<br>
				                Apache Olingo, Olingo, Apache, the Apache feather, and
				the Apache Olingo project logo are trademarks of the Apache Software
				Foundation.</p>
        <small><a href="/doc/odata2/privacy.html">Privacy</a></small>
      </div>
    </div><!-- /container -->
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="/js/jquery.js" type="text/javascript">
    </script>
    <script src="/js/bootstrap.js" type="text/javascript">
    </script>
    <script src="/js/offcanvas.js" type="text/javascript">
    </script>
    <link rel="stylesheet" href="/css/docco.css">
    <script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.0.1/build/highlight.min.js"></script>
    <script>hljs.highlightAll();</script>
  </body>
</html>