blob: 5db6bcca9ebf880f34ac6ce489857cbde58fd624 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-112407000-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-112407000-2');
</script>
<!-- Google Tag Manager -->
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-KS8HHSF');
</script>
<!-- End Google Tag Manager -->
<head>
<title>Getting Started with Codewind in Eclipse | Codewind</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Take advantage of Codewind&#39;s tools to help build high quality cloud native applications regardless of which IDE or language you use.">
<meta name="keywords" content="Eclipse, docker, container, devops, applications, development, iteration, microservices, cloud, services, rapid, integrated"/>
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon/favicon-32x32.png">
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:300,400,600&display=swap" rel="stylesheet">
<!-- Bootstrap CSS CDN -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<link rel="stylesheet" href="css/styles.css">
<link rel="stylesheet" href="css/docs.css">
<link rel="stylesheet" href="css/learn.css">
<link rel="stylesheet" href="css/blog.css">
<link rel="stylesheet" href="css/guides.css">
<link rel="stylesheet" href="css/search.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/themes/prism.min.css">
</head>
<body data-spy="scroll" data-target="#toc">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KS8HHSF"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div class="main">
<!-- Bootstrap NavBar -->
<nav class="navbar navbar-expand-xl navbar-light cw-banner fixed-top" aria-label="topnav">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/codewind/">
<img alt="Codewind logo image" title="Codewind logo image" src="images/header/header-logo.svg" class="cw-header-logo" alt="">
</a>
<div class="collapse navbar-collapse justify-content-end cw-navbar-padding" id="navbarNavDropdown">
<ul class="navbar-nav cw-navbar-nav">
<li class="nav-item cw-navbar-item cw-header-link-docs">
<a class="nav-link cw-nav-link cw-header-link-text" href="learn.html">Learn</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link-news">
<a class="nav-link cw-nav-link cw-header-link-text" href="news.html">News</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link-blog">
<a class="nav-link cw-nav-link cw-header-link-text" href="blog.html">Blog</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link-guides">
<a class="nav-link cw-nav-link cw-header-link-text" href="guides.html">Guides</a>
</li>
<form class="form-inline my-2 my-lg-0 cw-navbar-item" action="/codewind/search.html" method="get">
<svg class="bi bi-search" width="1em" height="1em" viewBox="0 0 16 16" fill="black" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M10.442 10.442a1 1 0 011.415 0l3.85 3.85a1 1 0 01-1.414 1.415l-3.85-3.85a1 1 0 010-1.415z" clip-rule="evenodd"/>
<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 100-11 5.5 5.5 0 000 11zM13 6.5a6.5 6.5 0 11-13 0 6.5 6.5 0 0113 0z" clip-rule="evenodd"/>
</svg>
<input id="nav-search" class="form-control mr-sm-2" type="text" id="search-box" name="query" placeholder="Search">
</form>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://github.com/eclipse/codewind"><img alt="Codewind Github" class="banner-image" title="Codewind Github" data-toggle="tooltip" data-placement="top" id="cw_github_stars" title="..." src="images/header/github.svg"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" class="banner-image" title="Codewind Twitter" src="images/header/twitter.png"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" class="banner-image" title="Codewind Mattermost" src="images/header/mattermost.png"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" class="banner-image" title="Codewind YouTube" src="images/header/youtube.png"/></a>
</li>
<!-- li class="nav-item cw-navbar-item" id="download-li">
<button onClick="window.location.href='https://microclimate.dev/download/codewind';" type="button" class="btn cw-download-button">Download</button>
<a href="https://microclimate.dev/download/codewind" class="nav-link cw-nav-link cw-download-link" href="#">Download</a>
</li> -->
<!-- Smaller devices menu END -->
</ul>
</div>
</nav>
<!-- End Bootstrap NavBar -->
<div class="row" id="post-row">
<div class="col-xs-12 col-lg-1"></div>
<div class="py-5 px-5 col-xs-12 col-lg-10">
<div class="cw-blog-spacer"></div>
<div id="post-content">
<h1>Getting Started with Codewind in Eclipse</h1>
<!--<p>13 Aug 2020</p>-->
<p>Take advantage of Codewind's tools to help build high quality cloud native applications regardless of which IDE or language you use.</p>
<h2>Objectives</h2>
<ul>
<li>
Install Eclipse and Codewind.
</li>
<li>
Develop a simple microservice that uses Eclipse Codewind in Eclipse.
</li>
</ul>
<div role="main"><h2 id="overview">Overview</h2>
<p>Use Eclipse Codewind to create application projects from Application Stacks that your company builds. With Codewind, you can focus on your code and not on infrastructure and Kubernetes. Application deployments to Kubernetes occur through pipelines when developers commit their local code to the correct Git repos Kabanero is managing through webhooks.</p>
<p>Use Codewind to create projects based on different template types. These projects include IBM Cloud Starters, OpenShift Do (odo), and Appsody templates. Today, there are templates for IBM Cloud Starters, odo, Eclipse MicroProfile/Java EE, Springboot, Node.js, Node.js with Express, and Node.js with Loopback.</p>
<h2 id="developing-with-eclipse">Developing with Eclipse</h2>
<p>You can use Codewind for Eclipse to develop and debug your containerized projects from within a local Eclipse IDE.</p>
<h3 id="prerequisite">Prerequisite</h3>
<p>Before you can develop a microservice with Eclipse, you need to:</p>
<ul>
<li><a href="https://docs.docker.com/install/">Install Docker</a>
<ul>
<li><strong>Note:</strong> Make sure to install or upgrade to minimum Docker version 19.03.</li>
</ul>
</li>
<li><a href="https://www.eclipse.org/downloads/packages/release/">Install Eclipse</a>
<ul>
<li><strong>Note:</strong> Make sure to install or upgrade to minimum Eclipse version 2020-03.</li>
</ul>
</li>
</ul>
<h3 id="installing-codewind-for-eclipse">Installing Codewind for Eclipse</h3>
<p>The Codewind installation pulls the following images that form the Codewind backend:</p>
<ol>
<li><code class="highlighter-rouge">eclipse/codewind-performance-amd64</code></li>
<li><code class="highlighter-rouge">eclipse/codewind-pfe-amd64</code></li>
</ol>
<p>The Codewind installation includes two parts:</p>
<ol>
<li>The Eclipse plug-in installs when you install Codewind from the <a href="https://marketplace.eclipse.org/content/codewind">Eclipse Marketplace</a>. Or from the Eclipse IDE, you can go to <strong>Help</strong>&gt;<strong>Eclipse Marketplace</strong> then search for Codewind.</li>
<li>The Codewind backend containers install after you click <strong>Install</strong>. Clicking <strong>Install</strong> downloads the Codewind backend containers, ~1GB.</li>
</ol>
<h3 id="configuring-codewind-to-use-application-stacks">Configuring Codewind to use application stacks</h3>
<p>Configure Codewind to use Appsody templates so you can focus exclusively on your code. These templates include an Eclipse MicroProfile stack that you can use to follow this guide. Complete the following steps to select the Appsody templates:</p>
<ol>
<li>Click the <strong>Codewind</strong> tab.</li>
<li>Expand <strong>Codewind</strong> by clicking the drop-down arrow.</li>
<li>Right-click <strong>Local [Running]</strong>.</li>
<li>Select <strong>Manage Template Sources…</strong>.</li>
<li>Select <strong>Appsody Stacks - incubator</strong>.</li>
<li>Click <strong>OK</strong>.</li>
</ol>
<p>When you configure Codewind to use Appsody templates, continue to develop your microservice within Codewind.</p>
<p>If your organization uses customized application stacks and gives you a URL that points to an <code class="highlighter-rouge">index.json</code> file, you can add it to Codewind:</p>
<ol>
<li>Return to <strong>Codewind</strong> and right-click <strong>Local [Running]</strong>.</li>
<li>Select <strong>Manage Template Sources…</strong>.</li>
<li>Click <strong>Add…</strong> to add your URL.</li>
<li>Add your URL in the <code class="highlighter-rouge">URL:</code> box in the pop-up window and save your changes.</li>
</ol>
<h3 id="creating-an-appsody-project">Creating an Appsody project</h3>
<p>Appsody helps you develop containerized applications and removes the burden of managing the full software development stack. If you want more context about Appsody, see the <a href="https://appsody.dev/docs">Appsody welcome page</a>.</p>
<ol>
<li>Right-click <strong>Local [Running]</strong> under <strong>Codewind</strong> in the <strong>Codewind</strong> tab.</li>
<li>Select <strong>+ Create New Project…</strong>
<ul>
<li><strong>Note:</strong> Make sure that Docker is running. Otherwise, you get an error.</li>
</ul>
</li>
<li>Name your project <strong>appsody-calculator</strong>.</li>
<li>Under <strong>Template</strong>, select <strong>Appsody Open Liberty default template</strong>. 
<ul>
<li>If you don’t see an Appsody template, select the <strong>Manage Template Sources…</strong> link in the window.</li>
<li>Select the <strong>Appsody Stacks - incubator</strong> checkbox.</li>
<li>Click <strong>OK</strong>.</li>
<li>The templates are refreshed, and the Appsody templates are available.</li>
</ul>
</li>
<li>Click <strong>Finish</strong>.
<ul>
<li>To monitor your project’s progress, right-click your project and select <strong>Show Log Files</strong>.</li>
<li>Select <strong>Show All</strong>. Then, a <strong>Console</strong> tab is displayed where you see your project’s build logs.</li>
</ul>
</li>
</ol>
<p>Your project is displayed in the <strong>Local [Running]</strong> section where the project’s progress is tracked.</p>
<p>Your project is complete when you see that your project is running and its build is successful.</p>
<h3 id="accessing-the-application-endpoint-in-a-browser">Accessing the application endpoint in a browser</h3>
<ol>
<li>Return to your project under the Codewind tab.</li>
<li>Right-click your project and select <strong>Open Application</strong>.</li>
</ol>
<p>Your application is now opened in a browser, showing the welcome to your Appsody microservice page.</p>
<h3 id="adding-a-rest-service-to-your-application">Adding a REST service to your application</h3>
<ol>
<li>Go to your project’s workspace under the Project Explorer tab.</li>
<li>Go to <strong>Java Resources</strong> then find <code class="highlighter-rouge">/src/main/java/dev.appsody.starter</code>.</li>
<li>Right-click <strong>dev.appsody.starter</strong> and select <strong>New</strong>&gt;<strong>Class</strong>.</li>
<li>Create a Class file, name it <strong>Calculator.java</strong>, and select <strong>Finish</strong>. This file is your JAX-RS resource.</li>
<li>Before you input any code, make sure that the file is empty.</li>
<li>Populate the file with the following code and then <strong>save</strong> the file:</li>
</ol>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">package</span> <span class="n">dev</span><span class="o">.</span><span class="na">appsody</span><span class="o">.</span><span class="na">starter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.core.Application</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.GET</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.Path</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.Produces</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.core.MediaType</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.core.Response</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">javax.ws.rs.PathParam</span><span class="o">;</span>
<span class="nd">@Path</span><span class="o">(</span><span class="s">"/calculator"</span><span class="o">)</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Calculator</span> <span class="kd">extends</span> <span class="nc">Application</span> <span class="o">{</span>
<span class="nd">@GET</span>
<span class="nd">@Path</span><span class="o">(</span><span class="s">"/aboutme"</span><span class="o">)</span>
<span class="nd">@Produces</span><span class="o">(</span><span class="nc">MediaType</span><span class="o">.</span><span class="na">TEXT_PLAIN</span><span class="o">)</span>
<span class="kd">public</span> <span class="nc">String</span> <span class="nf">aboutme</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="s">"You can add (+), subtract (-), and multiply (*) with this simple calculator."</span><span class="o">;</span>
<span class="o">}</span>
<span class="nd">@GET</span>
<span class="nd">@Path</span><span class="o">(</span><span class="s">"/{op}/{a}/{b}"</span><span class="o">)</span>
<span class="nd">@Produces</span><span class="o">(</span><span class="nc">MediaType</span><span class="o">.</span><span class="na">TEXT_PLAIN</span><span class="o">)</span>
<span class="kd">public</span> <span class="nc">Response</span> <span class="nf">calculate</span><span class="o">(</span><span class="nd">@PathParam</span><span class="o">(</span><span class="s">"op"</span><span class="o">)</span> <span class="nc">String</span> <span class="n">op</span><span class="o">,</span> <span class="nd">@PathParam</span><span class="o">(</span><span class="s">"a"</span><span class="o">)</span> <span class="nc">String</span> <span class="n">a</span><span class="o">,</span> <span class="nd">@PathParam</span><span class="o">(</span><span class="s">"b"</span><span class="o">)</span> <span class="nc">String</span> <span class="n">b</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">numA</span> <span class="o">=</span> <span class="nc">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">a</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">numB</span> <span class="o">=</span> <span class="nc">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">b</span><span class="o">);</span>
<span class="k">switch</span> <span class="o">(</span><span class="n">op</span><span class="o">)</span> <span class="o">{</span>
<span class="k">case</span> <span class="s">"+"</span><span class="o">:</span>
<span class="k">return</span> <span class="nc">Response</span><span class="o">.</span><span class="na">ok</span><span class="o">(</span><span class="n">a</span> <span class="o">+</span> <span class="s">"+"</span> <span class="o">+</span> <span class="n">b</span> <span class="o">+</span> <span class="s">"="</span> <span class="o">+</span> <span class="o">(</span><span class="nc">Integer</span><span class="o">.</span><span class="na">toString</span><span class="o">((</span><span class="n">numA</span> <span class="o">+</span> <span class="n">numB</span><span class="o">)))).</span><span class="na">build</span><span class="o">();</span>
<span class="k">case</span> <span class="s">"-"</span><span class="o">:</span>
<span class="k">return</span> <span class="nc">Response</span><span class="o">.</span><span class="na">ok</span><span class="o">(</span><span class="n">a</span> <span class="o">+</span> <span class="s">"-"</span> <span class="o">+</span> <span class="n">b</span> <span class="o">+</span> <span class="s">"="</span> <span class="o">+</span> <span class="o">(</span><span class="nc">Integer</span><span class="o">.</span><span class="na">toString</span><span class="o">((</span><span class="n">numA</span> <span class="o">-</span> <span class="n">numB</span><span class="o">)))).</span><span class="na">build</span><span class="o">();</span>
<span class="k">case</span> <span class="s">"*"</span><span class="o">:</span>
<span class="k">return</span> <span class="nc">Response</span><span class="o">.</span><span class="na">ok</span><span class="o">(</span><span class="n">a</span> <span class="o">+</span> <span class="s">"*"</span> <span class="o">+</span> <span class="n">b</span> <span class="o">+</span> <span class="s">"="</span> <span class="o">+</span> <span class="o">(</span><span class="nc">Integer</span><span class="o">.</span><span class="na">toString</span><span class="o">((</span><span class="n">numA</span> <span class="o">*</span> <span class="n">numB</span><span class="o">)))).</span><span class="na">build</span><span class="o">();</span>
<span class="k">default</span><span class="o">:</span>
<span class="k">return</span> <span class="nc">Response</span><span class="o">.</span><span class="na">ok</span><span class="o">(</span><span class="s">"Invalid operation. Please Try again"</span><span class="o">).</span><span class="na">build</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>Any changes that you make to your code are automatically built and redeployed by Codewind, and you can view them in your browser.</p>
<h3 id="working-with-the-example-calculator-microservice">Working with the example calculator microservice</h3>
<p>You now can work with the example calculator microservice.</p>
<ul>
<li>Use the <strong>Exposed Application Port</strong> number from the Application overview tab.</li>
<li>Make sure to remove the <code class="highlighter-rouge">&lt; &gt;</code> symbol in the URL.</li>
<li><code class="highlighter-rouge">http://127.0.0.1:&lt;port&gt;/starter/calculator/aboutme</code></li>
<li>You see the following response:</li>
</ul>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You can add (+), subtract (-), and multiply (*) with this simple calculator.
</code></pre></div></div>
<p>You can try a few of the sample calculator functions:</p>
<ul>
<li><code class="highlighter-rouge">http://127.0.0.1:&lt;port&gt;/starter/calculator/{op}/{a}/{b}</code>, where you can input one of the available operations <code class="highlighter-rouge">(+, _, *</code>, and an integer a, and an integer b.</li>
<li>So for <code class="highlighter-rouge">http://127.0.0.1:&lt;port&gt;/starter/calculator/+/10/3</code> you see: <code class="highlighter-rouge">10+3=13</code>.</li>
</ul>
<h2 id="what-you-have-learned">What you have learned</h2>
<p>In this quick guide, you have learned to:</p>
<ol>
<li>Install Codewind on Eclipse</li>
<li>Develop your own microservice that uses Codewind</li>
</ol>
<h2 id="next-steps">Next Steps</h2>
<p>See other quick guides to learn how to develop with Codewind:</p>
<ul>
<li><a href="codewind-vscode-quick-guide.html">Codewind in VS Code</a></li>
</ul>
</div>
</div>
</div>
<div class="col-xs-12 col-lg-1"></div>
</div>
<!-- footer row -->
<footer>
<div id="footer-div-mobile">
<div class="row">
<div class="col-sm-12 text-center">
<span>Useful Links:</span>
<br/><br/>
<a class="cw-footer-links" href="http://www.eclipse.org">Eclipse Foundation</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal">Legal</a><br/>
</div>
</div>
<div class="cw_footer_display_flex cw-footer-same-height cw-footer-center">
<div class="cw_footer_display_icons row">
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="mailto:codewind-dev@eclipse.org"><img alt="Send us an email" title="Send us an email" src="images/footer/email-icon.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" title="Codewind Twitter" src="images/footer/twitter-logo.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://github.com/eclipse/codewind"><img alt="Codewind Github" title="Codewind Github" src="images/footer/github-logo.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class=" cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" title="Codewind Mattermost" src="images/footer/mattermost-logo.png" class="cw-logo-mm" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" title="Codewind YouTube" src="images/footer/youtube-logo-dark.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="http://www.eclipse.org"><img class="cw-logo-eclipse-mobile" alt="Eclipse" title="Eclipse" src="images/footer/eclipse.svg"/></a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row cw-footer-desktop" id="footer-div">
<div class="cw-footer-left">
<div class="px-5 cw-font-12>
<span class="cw-font-14">Useful Links:</span>
<br/><br/>
<a class="cw-footer-links" href="http://www.eclipse.org">Eclipse Foundation</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal">Legal</a><br/>
</div>
</div>
<div class="cw-footer-border-right"></div>
<div class="cw_footer_display_flex cw-footer-same-height cw-footer-center">
<div class="cw_footer_display_icons">
<div class="cw-footer-col text-center">
<div>
<div>
<a href="mailto:codewind-dev@eclipse.org"><img alt="Send us an email" title="Send us an email" src="images/footer/email-icon.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" title="Codewind Twitter" src="images/footer/twitter-logo.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://github.com/eclipse/codewind"><img alt="Codewind Github" title="Codewind Github" src="images/footer/github-logo.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class=" cw-footer-col text-center">
<div class="cw-logo-mm" >
<div class="cw-logo-mm" >
<a href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" title="Codewind Mattermost" src="images/footer/mattermost-logo.png" class="cw-logo-mm" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" title="Codewind YouTube" src="images/footer/youtube-logo-dark.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
</div>
</div>
<div class="cw-footer-border-right"></div>
<div class="cw-footer-right cw-footer-same-height cw-footer-vcenter">
<div class="cw-footer-eclipse-img cw-footer-same-height px-5 ">
<a href="http://www.eclipse.org">
<img alt="Eclipse" title="Eclipse" src="images/footer/eclipse.svg"/>
</a>
</div>
</div>
</div>
</footer>
<!-- footer row END -->
<!-- Jquery -->
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
<!-- Font Awesome JS -->
<script defer src="https://use.fontawesome.com/releases/v5.0.13/js/solid.js"
integrity="sha384-tzzSw1/Vo+0N5UhStP3bvwWPq+uvzCMfrN1fEFe+xBmv1C/AtVX5K0uZtmcHitFZ" crossorigin="anonymous">
</script>
<script defer src="https://use.fontawesome.com/releases/v5.0.13/js/fontawesome.js"
integrity="sha384-6OIrr52G08NpOFSZdxxz1xdNSndlD4vdcf/q2myIUVO0VsqaGHJsB0RaBE01VTOY" crossorigin="anonymous">
</script>
<script src="js/jquery.matchHeight-min.js"></script>
<script src="js/index.js"></script>
<script src="js/docs.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-docker.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-json.min.js"></script>
</div>
</body>
</html>