<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtend - Download</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="Xtend is a statically typed programming language sitting on top of Java.">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	
	<link rel="shortcut icon" href="/xtend/images/favicon.png">
	
	<link href="/xtend/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/xtend/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/xtend/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/xtend/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/xtend/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/xtend/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/xtend/css/style.css" rel="stylesheet" type='text/css'>
	
	<!--[if lt IE 9]>
	<link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "http://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>

    <!-- Navbar -->
  <div class="navbar navbar-fixed-top"
    style="border-bottom: 1px solid #000;">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/xtend/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <li ><a href="/xtend/download.html">Download</a></li>
            <li ><a href="/xtend/documentation/index.html">Documentation</a></li>
            <li ><a href="/xtend/community.html">Community</a></li>
            <li ><a href="http://xtext.org">Xtext</a></li>
            <li ><a href="http://www.eclipse.org">Eclipse.org</a></li>
          </ul>
              <!--div class="btn-group pull-right">
                <div class="g-plusone" data-href="http://www.xtend-lang.org"></div>
              </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->


    <div id="page">
  <div class="inner">
    <div class="container clearfix">
    	<div>
	<div class="container">
		<div class="row">
			<div class="span12">
				<h2>Download Options</h2>
				<p>
		Xtend can be used in Eclipse. You can use your IDE's plug-in mechanism to add Xtend, using one of the URLs below.
				</p>
				<p>
				
					<strong><a href="releasenotes.html">Xtend 2.25.0 Release Notes</a></strong>
				
				</p>
			</div>
		</div>
		<div class="row">
			<div class="span12">
				<a href="https://www.eclipse.org/downloads/" target="_blank" class="has-popover btn btn-success btn-large pull_left">Download Eclipse</a>

				<h3>Eclipse Updatesites</h3>
				<p> To install the Xtend plug-in into a running Eclipse.</p>
				<p><a href="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/" class="has-popover btn btn-primary btn-medium">Releases (right click &amp; copy)</a></p>
				<p><a href="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/milestones/" class="has-popover btn btn-primary btn-medium">Milestones (right click &amp; copy)</a></p>
				<p><a href="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/latest/" class="has-popover btn btn-primary btn-medium">Nightly Builds (right click &amp; copy)</a></p>
				<h3>Installation Instructions</h3>
				<ul>
					<li>Choose <e>Help -&gt; Install New Software...</e> from the menu bar and <e>Add...</e>.</li>
					<li>Insert one of the update site URLs below. This site aggregates all the necessary and optional components and dependencies of Xtend.</li>
					<li>Select the <e>Xtend IDE</e> from the category <e>Xtend</e> and complete the wizard by clicking the <e>Next</e> button until you can click <e>Finish</e>.</li>
					<li>After a quick download and a restart of Eclipse, Xtend is ready to use.</li>
				</ul>
			</div>
		</div>
	</div>
</div>

<h3 id="maven-support">Maven Plugin</h3>

<p>You can create a readily configured project with the following command.</p>

<pre><code>mvn archetype:generate -DarchetypeGroupId=org.eclipse.xtend -DarchetypeArtifactId=xtend-archetype
</code></pre>

<p>If you already have a project, you need to add the Xtend library:</p>

<pre><code class="language-xml">&lt;dependency&gt;
  &lt;groupId&gt;org.eclipse.xtend&lt;/groupId&gt;
  &lt;artifactId&gt;org.eclipse.xtend.lib&lt;/artifactId&gt;
  &lt;version&gt;2.25.0&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>

<p>and the Xtend compiler plugin:</p>

<pre><code class="language-xml">&lt;plugin&gt;
  &lt;groupId&gt;org.eclipse.xtend&lt;/groupId&gt;
  &lt;artifactId&gt;xtend-maven-plugin&lt;/artifactId&gt;
  &lt;version&gt;2.25.0&lt;/version&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;goals&gt;
        &lt;goal&gt;compile&lt;/goal&gt;
        &lt;goal&gt;testCompile&lt;/goal&gt;
      &lt;/goals&gt;
      &lt;configuration&gt;
        &lt;outputDirectory&gt;${project.build.directory}/xtend-gen/main&lt;/outputDirectory&gt;
        &lt;testOutputDirectory&gt;${project.build.directory}/xtend-gen/test&lt;/testOutputDirectory&gt;
      &lt;/configuration&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
&lt;/plugin&gt;
</code></pre>

<h3 id="maven-support">Gradle Plugin</h3>

<p>Here is a minimal Gradle build script using Xtend:</p>

<pre><code class="language-groovy">plugins {
  id "org.xtext.xtend" version "2.0.8"
}

repositories.mavenCentral()

dependencies {
  compile 'org.eclipse.xtend:org.eclipse.xtend.lib:2.25.0'
}
</code></pre>

<p>For more information, visit the <a href="https://github.com/xtext/xtend-gradle-plugin">plugin’s page on GitHub</a></p>

<h3 id="have-fun">Have Fun!</h3>

<p>You can now use your IDE’s “New Xtend Class” wizard to start your journey.</p>

<p><a href="documentation/101_gettingstarted.html">Click here for documentation and examples.</a></p>

    </div>
  </div>
</div>

    
    <footer class="site-footer">
  <div id="extra">
    <div class="container inner-footer">
      <div class="row">
        <div class="span6">
          <h3 class="footer-links-header">Quick Links</h3>
          <ul class="footer-links clearfix">
            <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
            <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
            <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
            <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
          </ul>
          <ul class="footer-links clearfix">
            <li><a href="http://www.eclipse.org">Eclipse Home</a></li>
            <li><a href="http://marketplace.eclipse.org/">Market Place</a></li>
            <li><a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li>
          </ul>
        </div>
        <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header"">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtendlang"><img src="/xtend/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtendlang on Twitter</a>
              </li>
            </ul>
          </div>

      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <a href="http://dryicons.com/">Icons by http://dryicons.com</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <script src="/xtend/js/jquery-1.7.1.min.js" type="text/javascript"></script>
  <script src="/xtend/js/bootstrap.min.js" type="text/javascript"></script>
  
  <!-- include pretty-print files -->
  <script src="/xtend/js/prettify.js" type="text/javascript" ></script>
  <script src="/xtend/js/lang-xtend.js" type="text/javascript"></script>
  
  <!-- Include the plug-in -->
  <script src="/xtend/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/xtend/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/xtend/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-4' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
</footer>

  </body>

</html>
