<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>

<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Web Toolkit - Getting Started Guide</title>
<link href="../css/base.css" rel="stylesheet" type="text/css">
<link href="./doc.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" media="print" type="text/css">

<style type="text/css">

#footer .text {
  padding-top: 5px;
}

.documentation {
  margin-left: 0.25in;  
}

.documentation h1 {
  margin-left: -0.25in;
}

.documentation h2 {
  margin-left: -0.25in;
  margin-top: 1.5em;
}

.documentation h3 {
  margin-left: -0.125in;
}

.documentation ul.toc {
  margin: 0;
  padding: 0;
  margin-left: 2em;
}

</style>

    <style type="text/css">

    ol.instructions {
      margin: 0;
      padding: 0;
      margin-left: 2em;
    }

    .instructions .header {
      font-weight: bold;
    }

    .instructions li {
      margin-bottom: 1em;
    }

    div.screenshot {
      text-align: center;
      margin: 1em;
    }

    </style>
  </head>
  <body>
    
<div id="gaia">
  &nbsp;
</div>

<div id="header">
  <div id="logo"><a href="http://code.google.com/"><img src="http://code.google.com/images/code_sm.png" alt="Google"/></a></div>
  <div id="title">
      Google Web Toolkit
  </div>
  <div id="breadcrumbs">
    
      <span class="item"><a href="http://code.google.com">Google Code Home</a></span> &gt;
      
<span class="item"><a href="http://code.google.com/webtoolkit">Google Web Toolkit</a></span> &gt;
<span class="item"><a href="">Getting Started Guide</a></span>
    
  </div>
</div>

<div id="side" dir="ltr">
  <div id="menu">
    
      
<h4><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></h4>
<ul>
  <li><a href="http://code.google.com/webtoolkit/download.html">Download GWT</a></li>
</ul>
<ul>
  <li><a href="http://code.google.com/webtoolkit/overview.html">Product Overview</a></li>
  <li><a href="">Getting Started Guide</a></li>
  <li><a href="http://code.google.com/webtoolkit/documentation/examples/">Example Projects</a></li>
</ul>
<ul>
  <li><a href="./com.google.gwt.doc.DeveloperGuide.html">Developer Guide</a></li>
  <li><a href="./gwt.html">Class Reference</a></li>
  <li><a href="http://code.google.com/p/google-web-toolkit/issues/list">Issue Tracking</a></li>
  <li><a href="http://groups.google.com/group/Google-Web-Toolkit">Developer Forum</a></li>
</ul>
<ul>
  <li><a href="http://googlewebtoolkit.blogspot.com/">GWT Blog</a></li>
  <li><a href="http://code.google.com/webtoolkit/faq.html">GWT FAQ</a></li>
  <li><a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a></li>
</ul>
<ul>
  <li><a href="http://code.google.com/webtoolkit/thirdparty.html">Third Party Tools</a></li>
</ul>
    
  </div>

  <div id="search">
    <form id="searchbox_015986126177484454297:pfmwlvdl42y" action="http://www.google.com/cse">
      <input type="hidden" name="cx" value="015986126177484454297:pfmwlvdl42y" />
      <input type="hidden" name="cof" value="FORID:0" />
	  <div class="header">Search Google Code:</div>
      <input name="q" type="text" size="20" />
      <input type="submit" name="sa" value="Search" /><br/>
    </form>
    <script type="text/javascript" src="http://google.com/coop/cse/brand?form=searchbox_015986126177484454297:pfmwlvdl42y"></script>
  </div>

</div>


<script type="text/javascript">
//<![CDATA[

function walk(element, condition, operation) {
  if (!element) return;
  if (condition(element)) {
    operation(element);
    return;
  }
  for (var e = element.firstChild; e != null; e = e.nextSibling) {
    walk(e, condition, operation);
  }
}

function isCurrentLink(e) {
  return e.tagName == "A" && e.href == window.location.href;
}

function makeSelected(e) {
  e.className = "selected";
}

walk(document.getElementById("breadcrumbs"), isCurrentLink, makeSelected);
walk(document.getElementById("menu"), isCurrentLink, makeSelected);

//]]>
</script>

<div id="body">



<div class="documentation">

<h1>Google Web Toolkit Getting Started Guide</h1>

<h2>Table of Contents</h2>

<ul class="toc">
  <li><a href="#Install">Installing Google Web Toolkit</a></li>
  <li><a href="#Sample">Building a Sample Application</a></li>
  <li><a href="#New">Creating an Application from Scratch (without Eclipse)</a></li>
  <li><a href="#NewEclipse">Creating an Application from Scratch (with Eclipse)</a></li>
</ul>


<a name="Install"></a>
<h2>Installing Google Web Toolkit</h2>

<ol class="instructions">
  <li>
    <div class="header">Install the Java SDK.</div>
    <div class="details">If you don't have a recent version of the Java SDK installed, download and install <a href="http://java.sun.com/javase/downloads/" rel="nofollow">Sun Java Standard Edition SDK</a>.</div>
  </li>
  <li>
    <div class="header">Download Google Web Toolkit.</div>
    <div class="details">Download the <a href="http://code.google.com/webtoolkit/download.html">Google Web Toolkit package</a> for your operating system.</div>
  </li>
  <li>
    <div class="header">Unzip the Google Web Toolkit package.</div>
    <div class="details">On Windows, extract the files from <code>gwt-windows-@GWT_VERSION@.zip</code> with a program like <a 
href="http://www.winzip.com/" rel="nofollow">WinZip</a>.  On Mac and Linux, you can 
unpack the package with a command like <pre class="code">tar xvzf gwt-mac-@GWT_VERSION@.tar.gz</pre></div>
  </li>
  <li>
    <div class="header">Done! Start using Google Web Toolkit.</div>
    <div class="details">GWT doesn't have an installer application.  All the files you need to run and use GWT are located in the extracted directory. The main application you'll need to use GWT is <code>applicationCreator</code>, which is <a href="#New">described below</a>. It may be easiest to start out by building one of the <a href="#Sample">sample applications</a> shipped with GWT.</div>
  </li>
</ol>



<a name="Sample"></a>
<h2>Building a Sample Application</h2>

<p>All the sample applications are in the <code>samples/</code> directory in your GWT package. Each sample has a script you can run to start it in <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html">hosted mode</a> and a script you can use to compile it into JavaScript and HTML to run it <a href="com.google.gwt.doc.DeveloperGuide.Fundamentals.WebMode.html">web mode</a>.</p>

<h3>Running in Hosted Mode</h3>

<p>To run the Kitchen Sink sample in <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html">hosted mode</a>, navigate to the <code>samples/KitchenSink/</code> directory and run the <code>KitchenSink-shell</code> script. This will open the GWT browser with the Kitchen Sink application running inside:</p>

<div class="screenshot"><img src="./kitchensink-hosted.jpg" alt="Screenshot"/></div>

<p>Since you're running in <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html">hosted mode</a>, the application is running in the Java Virtual Machine (JVM).  This is typically the mode you'll use to debug your applications.</p>

<h3>Running in Web Mode</h3>

<p>To run the application in <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.WebMode.html">web mode</a>, compile the application by running the <code>KitchenSink-compile</code> script. The GWT compiler will generate a number of JavaScript and HTML files from the Kitchen Sink Java source code in the <code>www/</code> subdirectory.  To see the application, open the file <code>www/com.google.gwt.sample.kitchensink.KitchenSink/KitchenSink.html</code> in your favorite web browser.</p>

<div class="screenshot"><img src="./kitchensink-web.jpg" alt="Screenshot"/></div>

<p>Since you've compiled the project, you're now running pure JavaScript and HTML that should work in IE, Firefox, or Safari. If you were to deploy the Kitchen Sink example project in production, you would distribute the files in your <code>www/com.google.com.google.gwt.sample.kitchensink.KitchenSink/</code> directory to your web servers.</p>

<h3>Make a Few Changes</h3>

<p>The source code for Kitchen Sink is in the <code>src/</code> subdirectory. Try closing your browser windows, and open the file 
<code>src/com/google/gwt/sample/kitchensink/client/Info.java</code> in a text editor.  Line 26 of the file is the first line of the 
static initialization method for the first tab in the Kitchen Sink application (&quot;Intro&quot;):</p>

<pre class="code">return new SinkInfo(&quot;Intro&quot;, &quot;&lt;h2&gt;Introduction to the Kitchen Sink.&lt;/h2&gt;&quot;) {</pre>

<p>Change the second string from <code>&quot;&lt;h2&gt;Introduction to the Kitchen Sink.&lt;/h2&gt;&quot;</code> to <code>&quot;&lt;h2&gt;Foo bar&lt;/h2&gt;&quot;</code>:</p>

<pre class="code">return new SinkInfo(&quot;Intro&quot;, <ins>&quot;&lt;h2&gt;Foo bar&lt;/h2&gt;&quot;</ins>) {</pre>

<p>Now, save the file and simply click "Refresh" in the hosted mode application to see your recent change (if you previously closed 
hosted mode, go ahead and re-run the <code>KitchenSink-shell</code> script). The header should now say &quot;Foo 
bar&quot; instead of &quot;Introduction to the Kitchen Sink.&quot;:</p>

<div class="screenshot"><img src="./kitchensink-modified.jpg" alt="Screenshot" style="border: 1px solid silver"/></div>

<a name="New"></a>
<h2>Creating an Application from Scratch (without Eclipse)</h2>

<p>GWT ships with a command line utility called <code>applicationCreator</code> that automatically generates all the files you'll need in order to start a GWT project.  It can also generate <a href="http://www.eclipse.org/" rel="nofollow">Eclipse</a> project files and launch config files for easy hosted mode debugging, as <a href="#NewEclipse">described below</a>.</p>

<p>Based on the <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.ProjectStructure.html">recommended GWT project structure</a>, your main GWT application class should be in a subpackage <code>client</code>.  You can create a new application called MyApplication with the command:</p>

<pre class="code">applicationCreator com.mycompany.client.MyApplication</pre>

<p>The <code>applicationCreator</code> script will generate a number of files in <code>src/com/mycompany/</code>, including some basic &quot;Hello, world&quot; functionality in the class <code>src/com/mycompany/client/MyApplication.java</code>.  The script also generates a <a href="overview.html#Modes">hosted mode</a> launch script called <code>MyApplication-shell</code> and a compilation script called <code>MyApplication-compile</code>, just like the <a href="#Sample">sample application</a> above.</p>

<p>To run your newly created application in hosted mode, run the <code>MyApplication-shell</code> script:</p>

<div class="screenshot"><img src="./myapplication-hosted.jpg" alt="Screenshot"/></div>

<p>Try editing the files <code>src/com/mycompany/client/MyApplication.java</code> and <code>src/com/mycompany/public/MyApplication.html</code> to see how it changes your application.</p>


<a name="NewEclipse"></a>
<h2>Creating an Application from Scratch (with Eclipse)</h2>

<p>GWT includes a command line utility called <code>applicationCreator</code> that automatically generates all the files you'll need in order to start a GWT project.  It can also generate <a href="http://www.eclipse.org/" rel="nofollow">Eclipse</a> project files and launch config files for easy hosted mode debugging.  To generate an Eclipse project for a new application, first use the <code>projectCreator</code> script to generate a shell Eclipse project for your application:</p>

<pre class="code">projectCreator -eclipse MyProject</pre>

<p>Then generate your GWT application as <a href="#New">described above</a>, but with an additional <code>-eclipse</code> flag specifying the name of your Eclipse project:</p>

<pre class="code">applicationCreator -eclipse MyProject com.mycompany.client.MyApplication</pre>

<p>When you're done with these scripts, in addition to the <code>MyApplication-shell</code> and <code>MyApplication-compile</code> scripts, you should see <code>.project</code>, <code>.classpath</code>, and <code>MyApplication.launch</code> files in your current directory.</p>

<p>To open your project in Eclipse, launch Eclipse and click the File -> Import menu.  Choose &quot;Existing Projects into Workspace&quot; in the first screen of the wizard, and enter the directory in which you genetrated the <code>.project</code> file in the next screen of the wizard.  When you are complete, you should see your GWT project loaded into your Eclipse workspace:</p>

<div class="screenshot"><img src="./myapplication-eclipse.jpg" alt="Screenshot" style="border: 1px solid silver"/></div>

<p>Just click the green &quot;Run&quot; button at the top of the window to start your project in <a href="./com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html">hosted mode</a>.</p>

</div>

    



</div> 

<div id="footer" dir="ltr">
  
  <div class="text">
  
    
<div style="margin-bottom: 0.5em">Java&trade; is a trademark of Sun Microsystems.</div>
<div style="margin-bottom:0.5em">
  &copy;2007 Google -
  <a href="http://www.google.com/">Google Home</a> -
  <a href="http://www.google.com/jobs/">We're Hiring</a> -
  <a href="/webtoolkit/terms.html">Terms and Conditions</a> -
  <a href="http://groups.google.com/group/Google-Web-Toolkit">Developer Forum</a>
</div>
<div id="notice" style="text-align: center; border: 1em 0em 1em 0em">
  Except as otherwise <a
  href="http://code.google.com/policies.html#restrictions">noted</a>,
  the content of this page is licensed under the <a rel="license"
  href="http://creativecommons.org/licenses/by/2.5/">Creative Commons
  Attribution 2.5 License</a>.
<!-- <rdf:RDF xmlns="http://web.resource.org/cc/" 
              xmlns:dc="http://purl.org/dc/elements/1.1/"
              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <Work rdf:about="">
    <license rdf:resource="http://creativecommons.org/licenses/by/2.5/" />
  </Work>
  <License rdf:about="http://creativecommons.org/licenses/by/2.5/">
    <permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
    <permits rdf:resource="http://web.resource.org/cc/Distribution"/>
    <requires rdf:resource="http://web.resource.org/cc/Notice"/>
    <requires rdf:resource="http://web.resource.org/cc/Attribution"/>
    <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
  </License>
</rdf:RDF> -->
</div>



  
  </div>
</div>

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>


<script type="text/javascript">
  _uacct="UA-18071-1"; // code.google.com site-wide tracking
  _uanchor=1;
  _uff=0;
  urchinTracker();
</script>


  </body>
</html>
