blob: 4267b4d1d15726605b8fa52ee3c4b3852fd94d83 [file] [log] [blame]
<!--
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.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Apache Flink 0.9.0 Documentation: IDE setup</title>
<link rel="shortcut icon" href="http://flink.apache.org/docs/0.9/page/favicon.ico" type="image/x-icon">
<link rel="icon" href="http://flink.apache.org/docs/0.9/page/favicon.ico" type="image/x-icon">
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" href="http://flink.apache.org/docs/0.9/page/css/flink.css">
<link rel="stylesheet" href="http://flink.apache.org/docs/0.9/page/css/syntax.css">
<link rel="stylesheet" href="http://flink.apache.org/docs/0.9/page/css/codetabs.css">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Top navbar. -->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<!-- The logo. -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-logo">
<a href="http://flink.apache.org"><img alt="Apache Flink" src="http://flink.apache.org/docs/0.9/page/img/navbar-brand-logo.jpg"></a>
</div>
</div><!-- /.navbar-header -->
<!-- The navigation links. -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="http://flink.apache.org/docs/0.9/index.html">Overview<span class="hidden-sm hidden-xs"> 0.9.0</span></a></li>
<!-- Setup -->
<li class="dropdown">
<a href="http://flink.apache.org/docs/0.9/setup" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Setup <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="http://flink.apache.org/docs/0.9/setup/building.html">Get Flink 0.9-SNAPSHOT</a></li>
<li class="divider"></li>
<li role="presentation" class="dropdown-header"><strong>Deployment</strong></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/local_setup.html" class="active">Local</a></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/cluster_setup.html">Cluster (Standalone)</a></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/yarn_setup.html">YARN</a></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/gce_setup.html">GCloud</a></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/flink_on_tez.html">Flink on Tez <span class="badge">Beta</span></a></li>
<li class="divider"></li>
<li><a href="http://flink.apache.org/docs/0.9/setup/config.html">Configuration</a></li>
</ul>
</li>
<!-- Programming Guides -->
<li class="dropdown">
<a href="http://flink.apache.org/docs/0.9/apis" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Programming Guides <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="http://flink.apache.org/docs/0.9/apis/programming_guide.html"><strong>Batch: DataSet API</strong></a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/streaming_guide.html"><strong>Streaming: DataStream API</strong> <span class="badge">Beta</span></a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/python.html">Python API <span class="badge">Beta</span></a></li>
<li class="divider"></li>
<li><a href="scala_shell.html">Interactive Scala Shell</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/dataset_transformations.html">Dataset Transformations</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/best_practices.html">Best Practices</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/example_connectors.html">Connectors</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/examples.html">Examples</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/local_execution.html">Local Execution</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/cluster_execution.html">Cluster Execution</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/cli.html">Command Line Interface</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/web_client.html">Web Client</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/iterations.html">Iterations</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/java8.html">Java 8</a></li>
<li><a href="http://flink.apache.org/docs/0.9/apis/hadoop_compatibility.html">Hadoop Compatability <span class="badge">Beta</span></a></li>
</ul>
</li>
<!-- Libraries -->
<li class="dropdown">
<a href="http://flink.apache.org/docs/0.9/libs" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Libraries <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="http://flink.apache.org/docs/0.9/libs/spargel_guide.html">Graphs: Spargel</a></li>
<li><a href="http://flink.apache.org/docs/0.9/libs/gelly_guide.html">Graphs: Gelly <span class="badge">Beta</span></a></li>
<li><a href="http://flink.apache.org/docs/0.9/libs/ml/">Machine Learning <span class="badge">Beta</span></a></li>
<li><a href="http://flink.apache.org/docs/0.9/libs/table.html">Relational: Table <span class="badge">Beta</span></a></li>
</ul>
</li>
<!-- Internals -->
<li class="dropdown">
<a href="http://flink.apache.org/docs/0.9/internals" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Internals <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li role="presentation" class="dropdown-header"><strong>Contribute</strong></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/how_to_contribute.html">How to Contribute</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/coding_guidelines.html">Coding Guidelines</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/ide_setup.html">IDE Setup</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/logging.html">Logging</a></li>
<li class="divider"></li>
<li role="presentation" class="dropdown-header"><strong>Internals</strong></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/general_arch.html">Architecture &amp; Process Model</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/types_serialization.html">Type Extraction &amp; Serialization</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/job_scheduling.html">Jobs &amp; Scheduling</a></li>
<li><a href="http://flink.apache.org/docs/0.9/internals/add_operator.html">How-To: Add an Operator</a></li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right hidden-sm hidden-md" role="search" action="http://flink.apache.org/docs/0.9/search-results.html">
<div class="form-group">
<input type="text" class="form-control" name="q" placeholder="Search all pages">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
<!-- Main content. -->
<div class="container">
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
<h1>IDE setup</h1>
<ul id="markdown-toc">
<li><a href="#eclipse" id="markdown-toc-eclipse">Eclipse</a> <ul>
<li><a href="#eclipse-scala-ide-303" id="markdown-toc-eclipse-scala-ide-303">Eclipse Scala IDE 3.0.3</a></li>
<li><a href="#eclipse-scala-ide-400" id="markdown-toc-eclipse-scala-ide-400">Eclipse Scala IDE 4.0.0</a></li>
</ul>
</li>
<li><a href="#intellij-idea" id="markdown-toc-intellij-idea">IntelliJ IDEA</a> <ul>
<li><a href="#installing-the-scala-plugin" id="markdown-toc-installing-the-scala-plugin">Installing the Scala plugin</a></li>
<li><a href="#installing-the-scala-compiler-plugin" id="markdown-toc-installing-the-scala-compiler-plugin">Installing the Scala compiler plugin</a></li>
<li><a href="#importing-flink" id="markdown-toc-importing-flink">Importing Flink</a></li>
</ul>
</li>
</ul>
<h2 id="eclipse">Eclipse</h2>
<p>A brief guide how to set up Eclipse for development of the Flink core.
Flink uses mixed Scala/Java projects, which pose a challenge to some IDEs.
Below is the setup guide that works best from our personal experience.</p>
<p>For Eclipse users, we currently recomment the Scala IDE 3.0.3, as the most robust solution.</p>
<h3 id="eclipse-scala-ide-303">Eclipse Scala IDE 3.0.3</h3>
<p><strong>NOTE:</strong> While this version of the Scala IDE is not the newest, we have found it to be the most reliably working
version for complex projects like Flink. One restriction is, though, that it works only with Java 7, not with Java 8.</p>
<p><strong>Note:</strong> Before following this setup, make sure to run the build from the command line once
(<code>mvn clean package -DskipTests</code>)</p>
<ol>
<li>Download the Scala IDE (preferred) or install the plugin to Eclipse Kepler. See section below for download links
and instructions.</li>
<li>Add the “macroparadise” compiler plugin to the Scala compiler.
Open “Window” -&gt; “Preferences” -&gt; “Scala” -&gt; “Compiler” -&gt; “Advanced” and put into the “Xplugin” field the path to
the <em>macroparadise</em> jar file (typically “/home/<em>-your-user-</em>/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar”).
Note: If you do not have the jar file, you probably did not ran the command line build.</li>
<li>Import the Flink Maven projects (“File” -&gt; “Import” -&gt; “Maven” -&gt; “Existing Maven Projects”)</li>
<li>During the import, Eclipse will ask to automatically install additional Maven build helper plugins.</li>
<li>Close the “flink-java8” project. Since Eclipse Kepler does not support Java 8, you cannot develop this project.</li>
</ol>
<h4 id="download-links-for-scala-ide-303">Download links for Scala IDE 3.0.3</h4>
<p>The Scala IDE 3.0.3 is a previous stable release, and download links are a bit hidden.</p>
<p>The pre-packaged Scala IDE can be downloaded from the following links:</p>
<ul>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86_64.tar.gz">Linux (64 bit)</a></li>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86.tar.gz">Linux (32 bit)</a></li>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86_64.zip">MaxOS X Cocoa (64 bit)</a></li>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86.zip">MaxOS X Cocoa (32 bit)</a></li>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86_64.zip">Windows (64 bit)</a></li>
<li><a href="http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86.zip">Windows (32 bit)</a></li>
</ul>
<p>Alternatively, you can download Eclipse Kepler from <a href="https://eclipse.org/downloads/packages/release/Kepler/SR2">https://eclipse.org/downloads/packages/release/Kepler/SR2</a>
and manually add the Scala and Maven plugins by plugin site at <a href="http://scala-ide.org/download/prev-stable.html">http://scala-ide.org/download/prev-stable.html</a>.</p>
<ul>
<li>Either use the update site to install the plugin (“Help” -&gt; “Install new Software”)</li>
<li>Or download the <a href="http://download.scala-ide.org/sdk/helium/e38/scala211/stable/update-site.zip">zip file</a>, unpack it, and move the contents of the
“plugins” and “features” folders into the equally named folders of the Eclipse root directory</li>
</ul>
<h3 id="eclipse-scala-ide-400">Eclipse Scala IDE 4.0.0</h3>
<p><strong>NOTE: From personal experience, the use of the Scala IDE 4.0.0 performs worse than previous versions for complex projects like Flink.</strong>
<strong>Version 4.0.0 does not handle mixed Java/Scala projects as robustly and it frequently raises incorrect import and type errors.</strong></p>
<p><em>Note:</em> Before following this setup, make sure to run the build from the command line once
(<code>mvn clean package -DskipTests</code>)</p>
<ol>
<li>Download the Scala IDE: <a href="http://scala-ide.org/download/sdk.html">http://scala-ide.org/download/sdk.html</a></li>
<li>Import the Flink Maven projects (File -&gt; Import -&gt; Maven -&gt; Existing Maven Projects)</li>
<li>While importing the Flink project, the IDE may ask you to install an additional maven build helper plugin.</li>
<li>After the import, you need to set the Scala version of your projects to Scala 2.10 (from the default 2.11).
To do that, select all projects that contain Scala code (marked by the small <em>S</em> on the project icon),
right click and select “Scala -&gt; Set the Scala Installation” and pick “2.10.4”.
Currently, the project to which that is relevant are “flink-runtime”, “flink-scala”, “flink-scala-examples”,
“flink-streaming-example”, “flink-streaming-scala”, “flink-tests”, “flink-test-utils”, and “flink-yarn”.</li>
<li>Depending on your version of the Scala IDE, you may need to add the “macroparadise” compiler plugin to the
Scala compiler. Open “Window” -&gt; “Preferences” -&gt; “Scala” -&gt; “Compiler” -&gt; “Advanced” and put into the “Xplugin” field
the path to the <em>macroparadise</em> jar file (typically “/home/<em>-your-user-</em>/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar”)</li>
<li>In order to compile the “flink-java-8” project, you may need to add a Java 8 execution environment.
See <a href="http://stackoverflow.com/questions/25391207/how-do-i-add-execution-environment-1-8-to-eclipse-luna">this post</a>
for details.</li>
</ol>
<h2 id="intellij-idea">IntelliJ IDEA</h2>
<p>A brief guide on how to set up IntelliJ IDEA IDE for development of the Flink core.
As Eclipse is known to have issues with mixed Scala and Java projects, more and more contributers are migrating to IntelliJ IDEA.</p>
<p>The following documentation describes the steps to setup IntelliJ IDEA 14.0.3 (https://www.jetbrains.com/idea/download/) with the Flink sources.</p>
<p>Prior to doing anything, make sure that the Flink project is built at least once from the terminal:
<code>mvn clean package -DskipTests</code></p>
<h3 id="installing-the-scala-plugin">Installing the Scala plugin</h3>
<ol>
<li>Go to IntelliJ plugins settings (File -&gt; Settings -&gt; Plugins) and click on “Install Jetbrains plugin…”.</li>
<li>Select and install the “Scala” plugin.</li>
<li>Restart IntelliJ</li>
</ol>
<h3 id="installing-the-scala-compiler-plugin">Installing the Scala compiler plugin</h3>
<ol>
<li>Go to IntelliJ scala compiler settings (File -&gt; Settings -&gt; Build, Execution, Deployment -&gt; Compiler -&gt; Scala Compiler) and click on “Install Jetbrains plugin…”.</li>
<li>Click on the green plus icon on the right to add a compiler plugin</li>
<li>Point to the paradise jar: ~/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar If there is no such file, this means that you should build Flink from the terminal as explained above.</li>
</ol>
<h3 id="importing-flink">Importing Flink</h3>
<ol>
<li>Start IntelliJ IDEA and choose “Import Project”</li>
<li>Select the root folder of the Flink repository</li>
<li>Choose “Import project from external model” and select “Maven”</li>
<li>Leave the default options and finish the import.</li>
</ol>
</div>
<div class="col-sm-10 col-sm-offset-1">
<!-- Disqus thread and some vertical offset -->
<div style="margin-top: 75px; margin-bottom: 50px" id="disqus_thread"></div>
</div>
</div>
</div><!-- /.container -->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="http://flink.apache.org/docs/0.9/page/js/codetabs.js"></script>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-52545728-1', 'auto');
ga('send', 'pageview');
</script>
<!-- Disqus -->
<script type="text/javascript">
var disqus_shortname = 'stratosphere-eu';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
</body>
</html>