view DVN-web/installer/dvninstall/doc/guides/dataverse-developer-main.html @ 6:1b2188262ae9

adding the installer.
author "jurzua <jurzua@mpiwg-berlin.mpg.de>"
date Wed, 13 May 2015 11:50:21 +0200
parents
children
line wrap: on
line source



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>DVN Developers Guide &mdash; The Harvard Dataverse Network 3.6.1 documentation</title>
    
    <link rel="stylesheet" href="_static/agogo.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    './',
        VERSION:     '3.6.1',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    <link rel="top" title="The Harvard Dataverse Network 3.6.1 documentation" href="index.html" />
    <link rel="next" title="APIs Guide" href="dataverse-api-main.html" />
    <link rel="prev" title="Installers Guide" href="dataverse-installer-main.html" /> 
  </head>
  <body>
    <div class="header-wrapper">
      <div class="header">
        <div class="headertitle"><a
          href="index.html">The Harvard Dataverse Network 3.6.1 documentation</a></div>
        <div class="rel">
          <a href="dataverse-installer-main.html" title="Installers Guide"
             accesskey="P">previous</a> |
          <a href="dataverse-api-main.html" title="APIs Guide"
             accesskey="N">next</a> |
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a>
        </div>
       </div>
    </div>

    <div class="content-wrapper">
      <div class="content">
        <div class="document">
            
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="dvn-developers-guide">
<h1>DVN Developers Guide<a class="headerlink" href="#dvn-developers-guide" title="Permalink to this headline">¶</a></h1>
<p>Please note: This guide was updated in October 2013 to reflex the switch
from Ant to Maven in DVN 3.6.1.</p>
<div class="section" id="build-environment-configuring-netbeans">
<h2>Build Environment (Configuring NetBeans)<a class="headerlink" href="#build-environment-configuring-netbeans" title="Permalink to this headline">¶</a></h2>
<p>This chapter describes setting up the build environment that you will
need to build the DVN application from source code.</p>
<div class="section" id="install-netbeans-and-glassfish">
<h3>Install NetBeans and GlassFish<a class="headerlink" href="#install-netbeans-and-glassfish" title="Permalink to this headline">¶</a></h3>
<p>As of DVN version 3.6.1 and the switch to Maven, a DVN development
environment should not have any dependency on a particular IDE, but use
of NetBeans 7.2.1 is encouraged because it&#8217;s the version used by most of
the current developers (on Mac OS X).</p>
<p>The NetBeans project is currently offering an installer bundle that
contains both NetBeans 7.2.1 and a supported version of GlassFish
(3.1.2.2). If they choose to discontinue the bundle, you will have to
download and install the two packages separately. Note that you can have
multiple versions of both NetBeans and GlassFish on your system.</p>
<p>Please note: While we intend to investigate NetBeans 7.4 and GlassFish
4, these are not yet known to provide a suitable development
environment.</p>
<p>We strongly recommend that you run both installs <strong>as a regular user</strong>.&nbsp;There&#8217;s no reason to run your development environment as root.</p>
<div class="section" id="install-netbeans-bundle">
<h4>Install NetBeans bundle<a class="headerlink" href="#install-netbeans-bundle" title="Permalink to this headline">¶</a></h4>
<p>Download NetBeans 7.2.1 Java EE + GlassFish Open Source Edition 3.1.2.2
bundle from <a class="reference external" href="https://netbeans.org/downloads/7.2.1">https://netbeans.org/downloads/7.2.1</a></p>
<p>For Mac OS X, you will download a .dmg disk image that will open
automatically and start the installer for you. Choose the typical
installation but be sure to install GlassFish and JUnit when prompted.</p>
<p>Note that you don&#8217;t have to uninstall your existing NetBeans version.
You can have as many versions installed as you need in parallel.</p>
<p>When you start NetBeans 7.2.1 for the first time, you will be asked if
you want to import the settings from the previous installations. If you
have an existing, pre-DVN 3.* development environment on your system,
<strong>answer &#8220;no&#8221; &#8211; we want to create the new configuration from scratch.</strong></p>
</div>
<div class="section" id="if-you-have-to-install-glassfish-3-1-2-2">
<h4>[If you have to] Install GlassFish 3.1.2.2<a class="headerlink" href="#if-you-have-to-install-glassfish-3-1-2-2" title="Permalink to this headline">¶</a></h4>
<p>We <strong>strongly</strong> recommend that you install GlassFish Server 3.1.2.2,
Open Source Edition, <strong>Full Platform</strong>. If you have to install it
separately from NetBeans, it can be obtained from
<a class="reference external" href="http://glassfish.java.net/downloads/3.1.2.2-final.html">http://glassfish.java.net/downloads/3.1.2.2-final.html</a></p>
<p>The page above contains a link to the installation instructions, but the
process is very straightforward - just download and run the installer.</p>
<p>It is strongly recommended that you use Sun/Oracle Java JDK version 1.6.
Please make sure you have the newest (or at least, recent) build number
available for your platform. (On Mac OS X 10.8, since the JDK can be
installed as part of OS distribution, the version currently provided by
Apple should be sufficient). In other words, we do not recommend
building DVN under JDK 1.7 until the ticket regarding the move from Java
6 to 7 has been closed: <a class="reference external" href="https://redmine.hmdc.harvard.edu/issues/3306">https://redmine.hmdc.harvard.edu/issues/3306</a></p>
<p>Note that you don&#8217;t have to uninstall older versions of GlassFish you
may still have around. It&#8217;s ok to have multiple versions installed. But
make sure you have the 3.1.2.2 installation selected as the active
server in NetBeans.</p>
<p><strong>Important:</strong> During the installation, leave the admin password fields
blank. This is not a security risk since out of the box, GlassFish
3.1.2.2 will only be accepting admin connections on the localhost
interface. Choosing a password at this stage, however, will complicate
the installation process unnecessarily. Since this is a development
system, you can probably keep this configuration unchanged (admin on
localhost only). If you need to be able to connect to the admin console
remotely, please see the note in the Appendix section of the main
Installers Guide.</p>
</div>
<div class="section" id="install-junit-if-you-haven-t-already">
<h4>Install JUnit (if you haven&#8217;t already)<a class="headerlink" href="#install-junit-if-you-haven-t-already" title="Permalink to this headline">¶</a></h4>
<p>Depending on how you installed NetBeans, you might already have JUnit
installed. JUnit can be installed from Tools -&gt; Plugins.</p>
</div>
</div>
<div class="section" id="check-out-a-new-copy-of-the-dvn-source-tree">
<h3>Check out a new copy of the DVN source tree<a class="headerlink" href="#check-out-a-new-copy-of-the-dvn-source-tree" title="Permalink to this headline">¶</a></h3>
<div class="section" id="create-a-github-account-if-you-don-t-have-one-already">
<h4>Create a GitHub account [if you don&#8217;t have one already]<a class="headerlink" href="#create-a-github-account-if-you-don-t-have-one-already" title="Permalink to this headline">¶</a></h4>
<p>Sign up at <a class="reference external" href="https://github.com">https://github.com</a></p>
<p>Please note that primary audience of this guide (for now) is people who
have push access to <a class="reference external" href="https://github.com/IQSS/dvn">https://github.com/IQSS/dvn</a> . If you do not have
push access and want to contribute (and we hope you do!) please fork the
repo per <a class="reference external" href="https://help.github.com/articles/fork-a-repo">https://help.github.com/articles/fork-a-repo</a> and make
adjustments below when cloning the repo.</p>
</div>
<div class="section" id="set-up-an-ssh-keypair-if-you-haven-t-already">
<h4>Set up an ssh keypair (if you haven&#8217;t already)<a class="headerlink" href="#set-up-an-ssh-keypair-if-you-haven-t-already" title="Permalink to this headline">¶</a></h4>
<p>You <em>can</em> use git with passwords over HTTPS but it&#8217;s much nicer to set
up SSH keys.</p>
<p><a class="reference external" href="https://github.com/settings/ssh">https://github.com/settings/ssh</a> is the place to manage the ssh keys
GitHub knows about for you. That page also links to a nice howto:
<a class="reference external" href="https://help.github.com/articles/generating-ssh-keys">https://help.github.com/articles/generating-ssh-keys</a></p>
<p>From the terminal, <tt class="docutils literal"><span class="pre">ssh-keygen</span></tt> will create new ssh keys for you:</p>
<ul class="simple">
<li>private key: <tt class="docutils literal"><span class="pre">~/.ssh/id_rsa</span></tt><ul>
<li>It is <strong>very important to protect your private key</strong>. If someone
else acquires it, they can access private repositories on GitHub
and make commits as you! Ideally, you&#8217;ll store your ssh keys on an
encrypted volume and protect your private key with a password when
prompted for one by <tt class="docutils literal"><span class="pre">ssh-keygen</span></tt>. See also &#8220;Why do passphrases
matter&#8221; at <a class="reference external" href="https://help.github.com/articles/generating-ssh-keys">https://help.github.com/articles/generating-ssh-keys</a></li>
</ul>
</li>
<li>public key: <tt class="docutils literal"><span class="pre">~/.ssh/id_rsa.pub</span></tt></li>
</ul>
<p>After you&#8217;ve created your ssh keys, add the public key to your GitHub
account.</p>
</div>
<div class="section" id="clone-the-repo">
<h4>Clone the repo<a class="headerlink" href="#clone-the-repo" title="Permalink to this headline">¶</a></h4>
<p>Please see <a class="reference external" href="#branches">branches</a> for detail, but in short, the
&#8220;develop&#8221; branch is where new commits go. Below we will assume you want
to make commits to &#8220;develop&#8221;.</p>
<p>In NetBeans, click Team, then Git, then Clone.</p>
<div class="section" id="remote-repository">
<h5>Remote Repository<a class="headerlink" href="#remote-repository" title="Permalink to this headline">¶</a></h5>
<ul class="simple">
<li>Repository URL: <tt class="docutils literal"><span class="pre">github.com:IQSS/dvn.git</span></tt></li>
<li>Username: <tt class="docutils literal"><span class="pre">git</span></tt></li>
<li>Private/Public Key<ul>
<li>Private Key File: <tt class="docutils literal"><span class="pre">/Users/[YOUR_USERNAME]/.ssh/id_rsa</span></tt></li>
</ul>
</li>
<li>Passphrase: (the passphrase you chose while running <tt class="docutils literal"><span class="pre">ssh-keygen</span></tt>)</li>
</ul>
<p>Click Next.</p>
<p>If you are prompted about the authenticity of github.com&#8217;s RSA key fingerprint, answer &#8220;Yes&#8221; to continue connecting. GitHub&#8217;s RSA key fingerprint is listed at <a class="reference external" href="https://help.github.com/articles/generating-ssh-keys">https://help.github.com/articles/generating-ssh-keys</a></p>
</div>
<div class="section" id="remote-branches">
<h5>Remote Branches<a class="headerlink" href="#remote-branches" title="Permalink to this headline">¶</a></h5>
<p>Under Select Remote Branches check the &#8220;develop&#8221; branch.</p>
<p>Please note: You may see other branches listed, such as &#8220;master&#8221;, but
there is no need to check them out at this time.</p>
<p>Click Next.</p>
</div>
<div class="section" id="destination-directory">
<h5>Destination Directory<a class="headerlink" href="#destination-directory" title="Permalink to this headline">¶</a></h5>
<p>The defaults should be fine:</p>
<ul class="simple">
<li>Parent Directory: <tt class="docutils literal"><span class="pre">/Users/[YOUR_USERNAME]/NetBeansProjects</span></tt></li>
<li>Clone Name: <tt class="docutils literal"><span class="pre">dvn</span></tt></li>
<li>Checkout Branch: <tt class="docutils literal"><span class="pre">develop*</span></tt></li>
<li>Remote Name: <tt class="docutils literal"><span class="pre">origin</span></tt></li>
</ul>
<p>Click Finish.</p>
<p>You should see a message that 3 projects were cloned. Click &#8220;Open
Project&#8221;.</p>
</div>
</div>
</div>
<div class="section" id="open-projects">
<h3>Open Projects<a class="headerlink" href="#open-projects" title="Permalink to this headline">¶</a></h3>
<p>In the &#8220;Open Projects&#8221; dialog you should see three projects, DVN-lockss,
DVN-root, and DVN-web (a child of DVN-root).</p>
<p>Highlight DVN-root and check &#8220;Open Required&#8221; (to include DVN-web) and click &#8220;Open&#8221;.</p>
<p>At this point, you should have two (and only two) projects open in
NetBeans: DVN-root and DVN-web. If you hover over the projects, it&#8217;s
normal at this point to see warnings such as &#8220;Some dependency artifacts
are not in the local repository&#8221; or &#8220;Cannot find application server:
GlassFish Server 3+&#8221;. We&#8217;ll correct these next.</p>
</div>
<div class="section" id="build-for-the-first-time">
<h3>Build for the first time<a class="headerlink" href="#build-for-the-first-time" title="Permalink to this headline">¶</a></h3>
<p>In NetBeans, right-click DVN-root and click &#8220;Build&#8221;. This will download
many dependencies via Maven and may take several minutes.</p>
<p>When this process has completed, right-click DVN-web and click &#8220;Build&#8221;.
You should expect to see &#8220;BUILD SUCCESS&#8221;. This means you have
successfully built the .war application package, but do not attempt to
deploy the application just yet! We need to configure the server
environment first, which consists of GlassFish and PostgreSQL</p>
</div>
</div>
<div class="section" id="application-environment-configuring-glassfish-and-postgresql">
<h2>Application Environment (Configuring GlassFish and PostgreSQL)<a class="headerlink" href="#application-environment-configuring-glassfish-and-postgresql" title="Permalink to this headline">¶</a></h2>
<p>In this chapter, we describe the process of setting up your own local
application environment into which you will deploy the DVN application.</p>
<div class="section" id="install-postgresql-database-server">
<h3>Install PostgreSQL database server<a class="headerlink" href="#install-postgresql-database-server" title="Permalink to this headline">¶</a></h3>
<p>For Mac OS X (our default development OS), you can get the installer
from <a class="reference external" href="http://www.postgresql.org/download/macosx">http://www.postgresql.org/download/macosx</a></p>
<p>The installation is very straightforward; just make sure you answer
&#8220;yes&#8221; when asked if Postgres should be accepting network connections.
(The application will be accessing the database at the &#8220;localhost&#8221;
address).</p>
<p>Once installed, we recommend that you also allow connections
over local Unix sockets. This way the installer won&#8217;t have to ask you
for the Postgres password every time it needs to talk to the database.
To do so, modify the &#8220;local all all&#8221; line in the data/pg_hba.conf file
to look like this:</p>
<div class="line-block">
<div class="line">local all all trust</div>
</div>
<p><strong>Note</strong> that this only opens Postgres to the local socket connections,
and should not be considered a security risk. But if you are extra
cautious, you may use instead:</p>
<div class="line-block">
<div class="line">local all all ident sameuser</div>
</div>
<p>Restart Postgres for the changes to take effect!</p>
<p>Please note: if you have any problems with the PostgreSQL setup, please
ensure the right <tt class="docutils literal"><span class="pre">psql</span></tt> is in your <tt class="docutils literal"><span class="pre">$PATH</span></tt>.</p>
<p>You can check the instructions in the main Installers Guide for more info:
<a class="reference internal" href="dataverse-installer-main.html#postgresql"><em>PostgreSQL section</em></a>;
but the above should be sufficient to get your environment set up.</p>
</div>
<div class="section" id="run-the-install-dev-script">
<h3>Run the install-dev script<a class="headerlink" href="#run-the-install-dev-script" title="Permalink to this headline">¶</a></h3>
<p>The installer is supplied with the DVN source in the tools directory.
You must run it as root (for direct access to Postgres).</p>
<div class="line-block">
<div class="line">To run the script:</div>
<div class="line"><tt class="docutils literal"><span class="pre">sudo</span> <span class="pre">su</span> <span class="pre">-</span></tt></div>
<div class="line"><tt class="docutils literal"><span class="pre">cd</span> <span class="pre">/Users/[YOUR_USERNAME]/NetBeansProjects/dvn/tools/installer/dvninstall</span></tt></div>
</div>
<div class="line-block">
<div class="line">then execute</div>
<div class="line"><tt class="docutils literal"><span class="pre">./install-dev</span></tt></div>
</div>
<p>When prompted for various settings, you will likely be able to accept
all the default values (in a development environment, they are for the
most part the same for everybody).</p>
</div>
<div class="section" id="testing-login">
<h3>Testing login<a class="headerlink" href="#testing-login" title="Permalink to this headline">¶</a></h3>
<p>Once the <tt class="docutils literal"><span class="pre">install-dev</span></tt> script has completed successfully, you will
have a fully functional Dataverse Network server. After making sure
GlassFish has been started per the output of the script, you should be
able to log in DVN with these credentials:</p>
<ul class="simple">
<li><a class="reference external" href="http://localhost:8080/dvn/">http://localhost:8080/dvn/</a></li>
<li>username: networkAdmin</li>
<li>password: networkAdmin</li>
</ul>
<p>Please note that when deploying from NetBeans for the first time, you
will be prompted to select a deployment server. From the drop down,
select &#8220;GlassFish Server 3.1.2&#8221;, click &#8220;Remember in Current IDE Session&#8221;
and click &#8220;OK&#8221;.</p>
</div>
</div>
<div class="section" id="developing-with-git">
<h2>Developing with Git<a class="headerlink" href="#developing-with-git" title="Permalink to this headline">¶</a></h2>
<div class="section" id="commit">
<span id="id1"></span><h3>Commit<a class="headerlink" href="#commit" title="Permalink to this headline">¶</a></h3>
<p><strong>Committing Changes</strong></p>
<p>By following the instructions in the <em class="xref std std-ref">build</em> step, you
should be in the &#8220;develop&#8221; branch, which is where we want to make
commits as we work toward the next release.</p>
<p>You can verify which branch you are on by clicking Team then &#8220;Repository
Browser&#8221;.</p>
<p>You should see <tt class="docutils literal"><span class="pre">dvn</span> <span class="pre">[develop]</span></tt> at the root of the tree and <strong>develop</strong>
in bold under Branches -&gt; Local</p>
<p>Click Team, then &#8220;Show Changes&#8221;. Select the desired files and
right-click to commit.</p>
<p>To publish your changes on GitHub, you&#8217;ll need to follow the next step:
<a class="reference internal" href="#push"><em>push</em></a>.</p>
</div>
<div class="section" id="push">
<span id="id2"></span><h3>Push<a class="headerlink" href="#push" title="Permalink to this headline">¶</a></h3>
<p><strong>Pushing your commits to GitHub</strong></p>
<p>After making your <a class="reference internal" href="#commit"><em>commit</em></a>, push it to GitHub by clicking
Team -&gt; Remote -&gt; Push, then Next (to use your configured remote
repository), then checking <strong>develop</strong> and Finish.</p>
<p>Your commit should now appear on GitHub in the develop branch:
<a class="reference external" href="https://github.com/IQSS/dvn/commits/develop">https://github.com/IQSS/dvn/commits/develop</a></p>
<p>Your commit should <strong>not</strong> appear in the master branch on GitHub:
<a class="reference external" href="https://github.com/IQSS/dvn/commits/master">https://github.com/IQSS/dvn/commits/master</a> . Not yet anyway. We only
merge commits into master when we are ready to release.  Please see the
<a class="reference external" href="#branches">branches</a> section for for detail.</p>
</div>
<div class="section" id="release">
<h3>Release<a class="headerlink" href="#release" title="Permalink to this headline">¶</a></h3>
<div class="section" id="merge-develop-into-master">
<h4>Merge develop into master<a class="headerlink" href="#merge-develop-into-master" title="Permalink to this headline">¶</a></h4>
<div class="section" id="tag-the-release">
<h5>Tag the release<a class="headerlink" href="#tag-the-release" title="Permalink to this headline">¶</a></h5>
<p>Here is an example of how the 3.4 tag (
<a class="reference external" href="https://github.com/IQSS/dvn/tree/3.4">https://github.com/IQSS/dvn/tree/3.4</a>) was created and pushed to GitHub:</p>
<div class="highlight-guess"><div class="highlight"><pre><span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">branch</span>
<span class="o">*</span> <span class="n">develop</span>
  <span class="n">master</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">pull</span>
<span class="n">Already</span> <span class="n">up</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">date</span><span class="p">.</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">checkout</span> <span class="n">master</span>
<span class="n">Switched</span> <span class="n">to</span> <span class="n">branch</span> <span class="err">&#39;</span><span class="n">master</span><span class="err">&#39;</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">merge</span> <span class="n">develop</span>
<span class="n">Updating</span> <span class="n">fdbfe57</span><span class="p">.</span><span class="mf">.6</span><span class="n">ceb24f</span>
<span class="p">(</span><span class="n">snip</span><span class="p">)</span>
 <span class="n">create</span> <span class="n">mode</span> <span class="mi">100644</span> <span class="n">tools</span><span class="o">/</span><span class="n">installer</span><span class="o">/</span><span class="n">dvninstall</span><span class="o">/</span><span class="n">readme</span><span class="p">.</span><span class="n">md</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">tag</span>
<span class="mf">3.3</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">tag</span> <span class="o">-</span><span class="n">a</span> <span class="mf">3.4</span> <span class="o">-</span><span class="n">m</span> <span class="err">&#39;</span><span class="n">merged</span> <span class="n">develop</span><span class="p">,</span> <span class="n">tagging</span> <span class="n">master</span> <span class="n">as</span> <span class="mf">3.4</span><span class="err">&#39;</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">tag</span>
<span class="mf">3.3</span>
<span class="mf">3.4</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">push</span> <span class="n">origin</span> <span class="mf">3.4</span>
<span class="n">Counting</span> <span class="n">objects</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="n">done</span><span class="p">.</span>
<span class="n">Writing</span> <span class="n">objects</span><span class="o">:</span> <span class="mi">100</span><span class="o">%</span> <span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">1</span><span class="p">),</span> <span class="mi">182</span> <span class="n">bytes</span><span class="p">,</span> <span class="n">done</span><span class="p">.</span>
<span class="n">Total</span> <span class="mi">1</span> <span class="p">(</span><span class="n">delta</span> <span class="mi">0</span><span class="p">),</span> <span class="n">reused</span> <span class="mi">0</span> <span class="p">(</span><span class="n">delta</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">To</span> <span class="n">git</span><span class="err">@</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="o">:</span><span class="n">IQSS</span><span class="o">/</span><span class="n">dvn</span><span class="p">.</span><span class="n">git</span>
 <span class="o">*</span> <span class="p">[</span><span class="n">new</span> <span class="n">tag</span><span class="p">]</span>         <span class="mf">3.4</span> <span class="o">-&gt;</span> <span class="mf">3.4</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span> <span class="n">git</span> <span class="n">push</span> <span class="n">origin</span> <span class="n">master</span>
<span class="n">Total</span> <span class="mi">0</span> <span class="p">(</span><span class="n">delta</span> <span class="mi">0</span><span class="p">),</span> <span class="n">reused</span> <span class="mi">0</span> <span class="p">(</span><span class="n">delta</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">To</span> <span class="n">git</span><span class="err">@</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="o">:</span><span class="n">IQSS</span><span class="o">/</span><span class="n">dvn</span><span class="p">.</span><span class="n">git</span>
   <span class="n">fdbfe57</span><span class="p">.</span><span class="mf">.6</span><span class="n">ceb24f</span>  <span class="n">master</span> <span class="o">-&gt;</span> <span class="n">master</span>
<span class="nl">murphy:</span><span class="n">dvn</span> <span class="n">pdurbin</span><span class="err">$</span>
</pre></div>
</div>
</div>
<div class="section" id="make-release-available-for-download">
<h5>Make release available for download<a class="headerlink" href="#make-release-available-for-download" title="Permalink to this headline">¶</a></h5>
<p>On dvn-build:</p>
<div class="highlight-guess"><div class="highlight"><pre><span class="n">cd</span> <span class="n">tools</span><span class="o">/</span><span class="n">installer</span>
<span class="n">make</span> <span class="n">installer</span>
</pre></div>
</div>
<p>Rename the resulting &#8220;dvninstall.zip&#8221; to include the release number
(i.e. &#8220;dvninstall_v3_4.zip&#8221;) and upload it, the separate war file, a
readme, and a buildupdate script (all these files should include the
release number) to SourceForge (i.e.
<a class="reference external" href="http://sourceforge.net/projects/dvn/files/dvn/3.4/">http://sourceforge.net/projects/dvn/files/dvn/3.4/</a>).</p>
</div>
<div class="section" id="increment-the-version-number">
<h5>Increment the version number<a class="headerlink" href="#increment-the-version-number" title="Permalink to this headline">¶</a></h5>
<p>The file to edit is:</p>
<div class="line-block">
<div class="line"><a class="reference external" href="https://github.com/IQSS/dvn/blob/develop/src/DVN-web/sr/VersionNumber.properties">https://github.com/IQSS/dvn/blob/develop/src/DVN-web/src/VersionNumber.properties</a></div>
</div>
</div>
</div>
</div>
<div class="section" id="branches">
<h3>Branches<a class="headerlink" href="#branches" title="Permalink to this headline">¶</a></h3>
<div class="section" id="current-list-of-branches">
<h4>Current list of branches<a class="headerlink" href="#current-list-of-branches" title="Permalink to this headline">¶</a></h4>
<p><a class="reference external" href="https://github.com/IQSS/dvn/branches">https://github.com/IQSS/dvn/branches</a></p>
</div>
<div class="section" id="new-branching-model-develop-vs-master">
<h4>New branching model: develop vs. master<a class="headerlink" href="#new-branching-model-develop-vs-master" title="Permalink to this headline">¶</a></h4>
<p>Please note that with the move to git, we are adopting the branching
model described at
<a class="reference external" href="http://nvie.com/posts/a-successful-git-branching-model/">http://nvie.com/posts/a-successful-git-branching-model/</a></p>
<p>In this branching model there are two persistent branches:</p>
<ul class="simple">
<li>develop: where all new commits go</li>
<li>master: where code gets merged and tagged as a release</li>
</ul>
<p>That is to say, <strong>please make your commits on the develop branch, not
the master branch</strong>.</p>
</div>
<div class="section" id="feature-branches">
<h4>Feature branches<a class="headerlink" href="#feature-branches" title="Permalink to this headline">¶</a></h4>
<blockquote>
<div>&#8220;The essence of a feature branch is that it exists as long as the
feature is in development, but will eventually be merged back into
develop (to definitely add the new feature to the upcoming release)
or discarded (in case of a disappointing experiment).&#8221; &#8211;
<a class="reference external" href="http://nvie.com/posts/a-successful-git-branching-model/">http://nvie.com/posts/a-successful-git-branching-model/</a></div></blockquote>
</div>
<div class="section" id="example-feature-branch-2656-lucene">
<h4>Example feature branch: 2656-lucene<a class="headerlink" href="#example-feature-branch-2656-lucene" title="Permalink to this headline">¶</a></h4>
<p>First, we create the branch and check it out:</p>
<div class="highlight-python"><pre>murphy:dvn pdurbin$ git branch
  2656-solr
* develop
murphy:dvn pdurbin$ git branch 2656-lucene
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git branch
  2656-lucene
  2656-solr
* develop
murphy:dvn pdurbin$ git checkout 2656-lucene
Switched to branch '2656-lucene'
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git status
# On branch 2656-lucene
nothing to commit (working directory clean)
murphy:dvn pdurbin$</pre>
</div>
<div class="line-block">
<div class="line">Then, we make a change and a commit, and push it to:</div>
</div>
<div class="line-block">
<div class="line"><a class="reference external" href="https://github.com/iqss/dvn/tree/2656-lucene">https://github.com/iqss/dvn/tree/2656-lucene</a> (creating a new remote branch):</div>
</div>
<div class="highlight-python"><pre>murphy:dvn pdurbin$ vim src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/Indexer.java
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git commit -m 'start lucene faceting branch' src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/Indexer.java
[2656-lucene 3b82f88] start lucene faceting branch
 1 file changed, 73 insertions(+), 2 deletions(-)
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git push origin 2656-lucene
Counting objects: 25, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (13/13), 2.23 KiB, done.
Total 13 (delta 6), reused 0 (delta 0)
To git@github.com:IQSS/dvn.git
 * [new branch]      2656-lucene -&gt; 2656-lucene
murphy:dvn pdurbin$</pre>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<p>As we work on the feature branch, we merge the latest changes from
&#8220;develop&#8221;. We want to resolve conflicts in the feature branch itself so
that the feature branch will merge cleanly into &#8220;develop&#8221; when we&#8217;re
ready. In the example below, we use <tt class="docutils literal"><span class="pre">git</span> <span class="pre">mergetool</span></tt> and <tt class="docutils literal"><span class="pre">opendiff</span></tt>
to resolve conflicts and save the merge. Then we push the newly-merged
2656-lucene feature branch to GitHub:</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="highlight-python"><pre>murphy:dvn pdurbin$ git branch
* 2656-lucene
  2656-solr
  develop
murphy:dvn pdurbin$ git checkout develop
murphy:dvn pdurbin$ git branch
  2656-lucene
  2656-solr
* develop
murphy:dvn pdurbin$ git pull
remote: Counting objects: 206, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 120 (delta 70), reused 96 (delta 46)
Receiving objects: 100% (120/120), 17.65 KiB, done.
Resolving deltas: 100% (70/70), completed with 40 local objects.
From github.com:IQSS/dvn
   8fd223d..9967413  develop    -&gt; origin/develop
Updating 8fd223d..9967413
Fast-forward
 .../admin/EditNetworkPrivilegesServiceBean.java  |    5 +-
(snip)
 src/DVN-web/web/study/StudyFilesFragment.xhtml   |    2 +-
 12 files changed, 203 insertions(+), 118 deletions(-)
murphy:dvn pdurbin$ murphy:dvn pdurbin$ git pull
remote: Counting objects: 206, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 120 (delta 70), reused 96 (delta 46)
Receiving objects: 100% (120/120), 17.65 KiB, done.
Resolving deltas: 100% (70/70), completed with 40 local objects.
From github.com:IQSS/dvn
   8fd223d..9967413  develop    -&gt; origin/develop
Updating 8fd223d..9967413
Fast-forward
 .../admin/EditNetworkPrivilegesServiceBean.java  |    5 +-
(snip)
 .../harvard/iq/dvn/core/web/study/StudyUI.java   |    2 +-
 src/DVN-web/web/HomePage.xhtml                   |    5 +-
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git checkout 2656-lucene
Switched to branch '2656-lucene'
murphy:dvn pdurbin$
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git merge develop
Auto-merging src/DVN-web/web/BasicSearchFragment.xhtml
CONFLICT (content): Merge conflict in src/DVN-web/web/BasicSearchFragment.xhtml
Auto-merging src/DVN-web/src/edu/harvard/iq/dvn/core/web/BasicSearchFragment.java
Auto-merging src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/Indexer.java
Automatic merge failed; fix conflicts and then commit the result.
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git status
# On branch 2656-lucene
# Changes to be committed:
#
#       modified:   src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/admin/EditNetworkPrivilegesServiceBean.java
(snip)
#       new file:   src/DVN-web/web/admin/ChooseDataverseForCreateStudy.xhtml
#       modified:   src/DVN-web/web/study/StudyFilesFragment.xhtml
#
# Unmerged paths:
#   (use "git add/rm &lt;file&gt;..." as appropriate to mark resolution)
#
#       both modified:      src/DVN-web/web/BasicSearchFragment.xhtml
#
murphy:dvn pdurbin$ git mergetool
merge tool candidates: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 emerge vimdiff
Merging:
src/DVN-web/web/BasicSearchFragment.xhtml

Normal merge conflict for 'src/DVN-web/web/BasicSearchFragment.xhtml':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (opendiff):
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git add .
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git commit -m "Merge branch 'develop' into 2656-lucene"
[2656-lucene 519cd8c] Merge branch 'develop' into 2656-lucene
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git push origin 2656-lucene
(snip)
murphy:dvn pdurbin$</pre>
</div>
<div class="line-block">
<div class="line">When we are ready to merge the feature branch back into the develop branch, we can do so.</div>
</div>
<div class="line-block">
<div class="line">Here&#8217;s an example of merging the 2656-lucene branch back into develop:</div>
</div>
<div class="highlight-python"><pre>murphy:dvn pdurbin$ git checkout 2656-lucene
Switched to branch '2656-lucene'
murphy:dvn pdurbin$ git pull
Already up-to-date.
murphy:dvn pdurbin$ git checkout develop
Switched to branch 'develop'
murphy:dvn pdurbin$ git pull
Already up-to-date.
murphy:dvn pdurbin$ git merge 2656-lucene
Removing lib/dvn-lib-EJB/lucene-core-3.0.0.jar
Merge made by the 'recursive' strategy.
 lib/dvn-lib-EJB/lucene-core-3.0.0.jar                                     |  Bin 1021623 -&gt; 0 bytes
 lib/dvn-lib-EJB/lucene-core-3.5.0.jar                                     |  Bin 0 -&gt; 1466301 bytes
 lib/dvn-lib-EJB/lucene-facet-3.5.0.jar                                    |  Bin 0 -&gt; 293582 bytes
 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/DvnQuery.java          |  160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/IndexServiceBean.java  |   56 ++++++++++++++++++++
 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/IndexServiceLocal.java |   16 +++++-
 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/Indexer.java           |  432 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/ResultsWithFacets.java |   71 +++++++++++++++++++++++++
 src/DVN-web/src/SearchFieldBundle.properties                              |    4 +-
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/AdvSearchPage.java            |   86 +++++++++++++++++++++++++++++++
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/BasicSearchFragment.java      |  102 +++++++++++++++++++++++++++++++++++-
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/StudyListing.java             |   11 ++++
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/StudyListingPage.java         |  428 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/study/FacetResultUI.java      |   42 +++++++++++++++
 src/DVN-web/src/edu/harvard/iq/dvn/core/web/study/FacetUI.java            |   62 ++++++++++++++++++++++
 src/DVN-web/web/AdvSearchPage.xhtml                                       |    3 +-
 src/DVN-web/web/BasicSearchFragment.xhtml                                 |    9 ++--
 src/DVN-web/web/StudyListingPage.xhtml                                    |   43 +++++++++++-----
 18 files changed, 1500 insertions(+), 25 deletions(-)
 delete mode 100644 lib/dvn-lib-EJB/lucene-core-3.0.0.jar
 create mode 100644 lib/dvn-lib-EJB/lucene-core-3.5.0.jar
 create mode 100644 lib/dvn-lib-EJB/lucene-facet-3.5.0.jar
 create mode 100644 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/DvnQuery.java
 create mode 100644 src/DVN-EJB/src/java/edu/harvard/iq/dvn/core/index/ResultsWithFacets.java
 create mode 100644 src/DVN-web/src/edu/harvard/iq/dvn/core/web/study/FacetResultUI.java
 create mode 100644 src/DVN-web/src/edu/harvard/iq/dvn/core/web/study/FacetUI.java
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git status
# On branch develop
# Your branch is ahead of 'origin/develop' by 68 commits.
#
nothing to commit (working directory clean)
murphy:dvn pdurbin$
murphy:dvn pdurbin$ git push
Counting objects: 51, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (19/19), 1.41 KiB, done.
Total 19 (delta 7), reused 0 (delta 0)
To git@github.com:IQSS/dvn.git
   b7fae01..2b88b68  develop -&gt; develop
murphy:dvn pdurbin$</pre>
</div>
</div>
<div class="section" id="switching-to-the-master-branch-to-merge-commits-from-the-develop-branch">
<h4>Switching to the master branch to merge commits from the develop branch<a class="headerlink" href="#switching-to-the-master-branch-to-merge-commits-from-the-develop-branch" title="Permalink to this headline">¶</a></h4>
<p>We should really only need to switch from the develop branch to the
master branch as we prepare for a release.</p>
<p>First, we check out the master branch by clicking Team -&gt; Git -&gt; Branch
-&gt; Switch to Branch.</p>
<p>Change Branch to &#8220;origin/master&#8221; and check the box for &#8220;Checkout as New
Branch&#8221; and fill in &#8220;master&#8221; as the &#8220;Branch Name&#8221; to match the name of
the branch we&#8217;re switching to. Then click &#8220;Switch&#8221;.</p>
<p>Now, in the Git Repository Browser (from Team -&gt; Repository Browser) the
root of the tree should say <tt class="docutils literal"><span class="pre">dvn</span> <span class="pre">[master]</span></tt> and you should see two
branches under Branches -&gt; Local. <strong>master</strong> should be in bold and
develop should not.</p>
</div>
</div>
<div class="section" id="tips">
<h3>Tips<a class="headerlink" href="#tips" title="Permalink to this headline">¶</a></h3>
<div class="section" id="previewing-changes-before-a-pull">
<h4>Previewing changes before a pull<a class="headerlink" href="#previewing-changes-before-a-pull" title="Permalink to this headline">¶</a></h4>
<p>If the build fails overnight you may want to hold off on doing a pull
until the problem is resolved. To preview what has changed since your
last pull, you can do a <tt class="docutils literal"><span class="pre">git</span> <span class="pre">fetch</span></tt> (the first part of a pull) then
<tt class="docutils literal"><span class="pre">git</span> <span class="pre">log</span> <span class="pre">HEAD..origin/develop</span></tt> to see the commit messages.
<tt class="docutils literal"><span class="pre">git</span> <span class="pre">log</span> <span class="pre">-p</span></tt> or <tt class="docutils literal"><span class="pre">git</span> <span class="pre">diff</span></tt> will allow you to see the contents of the
changes:</p>
<div class="highlight-python"><pre>git checkout develop
git fetch
git log HEAD..origin/develop
git log -p HEAD..origin/develop
git diff HEAD..origin/develop</pre>
</div>
<p>After the build is working again, you can simply do a pull as normal.</p>
</div>
</div>
<div class="section" id="errors">
<h3>Errors<a class="headerlink" href="#errors" title="Permalink to this headline">¶</a></h3>
<div class="section" id="duplicate-class">
<h4>Duplicate class<a class="headerlink" href="#duplicate-class" title="Permalink to this headline">¶</a></h4>
<p>The error &#8220;duplicate class&#8221; can result whenever you resolve a merge
conflict in git.</p>
<p>The fix is to close NetBeans and delete (or move aside) the cache like
this:</p>
<div class="highlight-python"><pre>cd ~/Library/Caches/NetBeans
mv 7.2.1 7.2.1.moved</pre>
</div>
<p>According to <a class="reference external" href="https://netbeans.org/bugzilla/show_bug.cgi?id=197983">https://netbeans.org/bugzilla/show_bug.cgi?id=197983</a> this might be fixed in NetBeans 7.3.</p>
</div>
</div>
</div>
</div>


          </div>
        </div>
      </div>
        </div>
        <div class="sidebar">
          <h3>Table Of Contents</h3>
          <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="dataverse-user-main.html">User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="dataverse-installer-main.html">Installers Guide</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">DVN Developers Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#build-environment-configuring-netbeans">Build Environment (Configuring NetBeans)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#install-netbeans-and-glassfish">Install NetBeans and GlassFish</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#install-netbeans-bundle">Install NetBeans bundle</a></li>
<li class="toctree-l4"><a class="reference internal" href="#if-you-have-to-install-glassfish-3-1-2-2">[If you have to] Install GlassFish 3.1.2.2</a></li>
<li class="toctree-l4"><a class="reference internal" href="#install-junit-if-you-haven-t-already">Install JUnit (if you haven&#8217;t already)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#check-out-a-new-copy-of-the-dvn-source-tree">Check out a new copy of the DVN source tree</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#create-a-github-account-if-you-don-t-have-one-already">Create a GitHub account [if you don&#8217;t have one already]</a></li>
<li class="toctree-l4"><a class="reference internal" href="#set-up-an-ssh-keypair-if-you-haven-t-already">Set up an ssh keypair (if you haven&#8217;t already)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#clone-the-repo">Clone the repo</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#remote-repository">Remote Repository</a></li>
<li class="toctree-l5"><a class="reference internal" href="#remote-branches">Remote Branches</a></li>
<li class="toctree-l5"><a class="reference internal" href="#destination-directory">Destination Directory</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#open-projects">Open Projects</a></li>
<li class="toctree-l3"><a class="reference internal" href="#build-for-the-first-time">Build for the first time</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#application-environment-configuring-glassfish-and-postgresql">Application Environment (Configuring GlassFish and PostgreSQL)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#install-postgresql-database-server">Install PostgreSQL database server</a></li>
<li class="toctree-l3"><a class="reference internal" href="#run-the-install-dev-script">Run the install-dev script</a></li>
<li class="toctree-l3"><a class="reference internal" href="#testing-login">Testing login</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#developing-with-git">Developing with Git</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#commit">Commit</a></li>
<li class="toctree-l3"><a class="reference internal" href="#push">Push</a></li>
<li class="toctree-l3"><a class="reference internal" href="#release">Release</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#merge-develop-into-master">Merge develop into master</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#tag-the-release">Tag the release</a></li>
<li class="toctree-l5"><a class="reference internal" href="#make-release-available-for-download">Make release available for download</a></li>
<li class="toctree-l5"><a class="reference internal" href="#increment-the-version-number">Increment the version number</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#branches">Branches</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#current-list-of-branches">Current list of branches</a></li>
<li class="toctree-l4"><a class="reference internal" href="#new-branching-model-develop-vs-master">New branching model: develop vs. master</a></li>
<li class="toctree-l4"><a class="reference internal" href="#feature-branches">Feature branches</a></li>
<li class="toctree-l4"><a class="reference internal" href="#example-feature-branch-2656-lucene">Example feature branch: 2656-lucene</a></li>
<li class="toctree-l4"><a class="reference internal" href="#switching-to-the-master-branch-to-merge-commits-from-the-develop-branch">Switching to the master branch to merge commits from the develop branch</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#tips">Tips</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#previewing-changes-before-a-pull">Previewing changes before a pull</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#errors">Errors</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#duplicate-class">Duplicate class</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="dataverse-api-main.html">APIs Guide</a></li>
</ul>

          <h3 style="margin-top: 1.5em;">Search</h3>
          <form class="search" action="search.html" method="get">
            <input type="text" name="q" />
            <input type="submit" value="Go" />
            <input type="hidden" name="check_keywords" value="yes" />
            <input type="hidden" name="area" value="default" />
          </form>
          <p class="searchtip" style="font-size: 90%">
            Enter search terms.
          </p>
        </div>
        <div class="clearer"></div>
      </div>
    </div>

    <div class="footer-wrapper">
      <div class="footer">
        <div class="left">
          <a href="dataverse-installer-main.html" title="Installers Guide"
             >previous</a> |
          <a href="dataverse-api-main.html" title="APIs Guide"
             >next</a> |
          <a href="genindex.html" title="General Index"
             >index</a>
            <br/>
            <a href="_sources/dataverse-developer-main.txt"
               rel="nofollow">Show Source</a>
        </div>

        <div class="right">
          
    <div class="footer">
        &copy; Copyright 1997-2013, President &amp; Fellows Harvard University.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
    </div>
        </div>
        <div class="clearer"></div>
      </div>
    </div>

  </body>
</html>