build.html 14.0 KB
Newer Older
1 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
3
Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
and under the Eclipse Public License, Version 1.0
(http://h2database.com/html/license.html).
Initial Developer: H2 Group
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Build
</title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<!-- [search] { -->
<script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<!-- } -->

<h1>Build</h1>
<a href="#portability">
    Portability</a><br />
<a href="#environment">
    Environment</a><br />
<a href="#building">
    Building the Software</a><br />
<a href="#build_targets">
    Build Targets</a><br />
<a href="#maven2">
    Using Maven 2</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
29 30
<a href="#using_eclipse">
    Using Eclipse</a><br />
31 32 33 34
<a href="#translating">
    Translating</a><br />
<a href="#providing_patches">
    Providing Patches</a><br />
35 36
<a href="#support">
    Reporting Problems or Requests</a><br />
37 38
<a href="#automated">
    Automated Build</a><br />
39 40
<a href="#railroad">
    Generating Railroad Diagrams</a><br />
41

Thomas Mueller's avatar
Thomas Mueller committed
42
<h2 id="portability">Portability</h2>
43 44 45 46 47
<p>
This database is written in Java and therefore works on many platforms.
It can also be compiled to a native executable using GCJ.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
48
<h2 id="environment">Environment</h2>
49
<p>
Thomas Mueller's avatar
Thomas Mueller committed
50
To run this database, a Java Runtime Environment (JRE) version 1.5 or higher is required.
51 52
</p>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
53 54
To create the database executables, the following software stack was used.
To use this database, it is not required to install this software however.
55
</p>
56
<ul><li>Mac OS X and Windows XP
Thomas Mueller's avatar
Thomas Mueller committed
57
</li><li><a href="http://java.sun.com/javase/downloads">Sun JDK Version 1.5 and 1.6</a>
58 59
</li><li><a href="http://www.eclipse.org">Eclipse Version 3.4</a>
</li><li>Eclipse Plugins:
Thomas Mueller's avatar
Thomas Mueller committed
60 61
    <a href="http://subclipse.tigris.org">Subclipse</a>,
    <a href="http://eclipse-cs.sourceforge.net">Eclipse Checkstyle Plug-in</a>,
62 63
    <a href="http://www.eclemma.org">EclEmma Java Code Coverage 1.3.0</a>
</li><li><a href="http://emma.sourceforge.net">Emma Java Code Coverage</a>
Thomas Mueller's avatar
Thomas Mueller committed
64 65
</li><li><a href="http://www.mozilla.com/firefox">Mozilla Firefox</a>
</li><li><a href="http://www.openoffice.org">OpenOffice</a>
66
</li><li><a href="http://nsis.sourceforge.net">NSIS 2.38</a> (Nullsoft Scriptable Install System)
Thomas Mueller's avatar
Thomas Mueller committed
67
</li><li><a href="http://maven.apache.org">Maven</a>
68 69
</li></ul>

Thomas Mueller's avatar
Thomas Mueller committed
70
<h2 id="building">Building the Software</h2>
71
<p>
Thomas Mueller's avatar
Thomas Mueller committed
72
You need to install a JDK, for example the Sun JDK version 1.5 or 1.6.
73 74 75
Ensure that Java binary directory is included in the <code>PATH</code> environment variable, and that
the environment variable <code>JAVA_HOME</code> points to your Java installation.
On the command line, go to the directory <code>h2</code> and execute the following command:
76
</p>
77
<pre>
78 79 80
build -?
</pre>
<p>
81
For Linux and OS X, use <code>./build.sh</code> instead of <code>build</code>.
82 83
</p>
<p>
84
You will get a list of targets. If you want to build the <code>jar</code> file, execute (Windows):
85
</p>
86
<pre>
87 88
build jar
</pre>
89 90 91
<p>
To run the build tool in shell mode, use the command line option <code>-</code> as in <code>./build.sh -</code>.
</p>
92 93 94

<h3>Switching the Source Code</h3>
<p>
95
By default the source code uses Java 1.6 features, however Java 1.5 is supported as well.
96
To switch the source code to the installed version of Java, run:
97
</p>
98
<pre>
99 100 101
build switchSource
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
102
<h2 id="build_targets">Build Targets</h2>
103 104 105
<p>
The build system can generate smaller jar files as well. The following targets are currently supported:
</p>
106 107 108 109
<ul><li><code>jarClient</code>
    creates the file <code>h2client.jar</code>. This only contains the JDBC client.
</li><li><code>jarSmall</code>
    creates the file <code>h2small.jar</code>.
110
    This only contains the embedded database. Debug information is disabled.
111 112
</li><li><code>jarJaqu</code>
    creates the file <code>h2jaqu.jar</code>.
113
    This only contains the JaQu (Java Query) implementation. All other jar files do not include JaQu.
114
</li><li><code>javadocImpl</code> creates the Javadocs of the implementation.
115 116
</li></ul>
<p>
117
To create the file <code>h2client.jar</code>, go to the directory <code>h2</code> and execute the following command:
118
</p>
119
<pre>
120 121 122
build jarClient
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
123 124 125 126 127 128 129 130 131 132 133
<h3>Using Lucene 2 / 3</h3>
<p>
Both Apache Lucene 2 and Lucene 3 are supported.
Currently Apache Lucene version 2.x is used by default for H2 version 1.2.x,
and Lucene version 3.x is used by default for H2 version 1.3.x.
To use a different version of Lucene when compiling, it needs to be specified as follows:
</p>
<pre>
build -Dlucene=2 clean compile
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
134
<h2 id="maven2">Using Maven 2</h2>
135 136 137 138 139
<h3>Using a Central Repository</h3>
<p>
You can include the database in your Maven 2 project as a dependency.
Example:
</p>
140
<pre>
141 142 143 144 145 146 147 148
&lt;dependency&gt;
    &lt;groupId&gt;com.h2database&lt;/groupId&gt;
    &lt;artifactId&gt;h2&lt;/artifactId&gt;
    &lt;version&gt;${version}&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>
New versions of this database are first uploaded to http://hsql.sourceforge.net/m2-repo/ and then automatically
149 150
synchronized with the main <a href="http://repo2.maven.org/maven2/com/h2database/h2/">Maven repository</a>;
however after a new release it may take a few hours before they are available there.
151 152 153 154
</p>

<h3>Using Snapshot Version</h3>
<p>
155
To build a <code>h2-*-SNAPSHOT.jar</code> file and upload it the to the local Maven 2 repository, execute the following command:
156
</p>
157
<pre>
158 159 160 161 162
build mavenInstallLocal
</pre>
<p>
Afterwards, you can include the database in your Maven 2 project as a dependency:
</p>
163
<pre>
164 165 166 167 168 169 170
&lt;dependency&gt;
    &lt;groupId&gt;com.h2database&lt;/groupId&gt;
    &lt;artifactId&gt;h2&lt;/artifactId&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;/dependency&gt;
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
171 172 173 174 175 176 177 178 179
<h2 id="using_eclipse">Using Eclipse</h2>
<p>
To create an Eclipse project for H2, use the following steps:
</p>
<ul><li>Install Subversion and <a href="http://www.eclipse.org">Eclipse</a>.
</li><li>Get the H2 source code from the Subversion repository:<br />
    <code>svn checkout http://h2database.googlecode.com/svn/trunk h2database-read-only</code>
</li><li>Download all dependencies (Windows):<br />
    <code>build.bat download</code>
Thomas Mueller's avatar
Thomas Mueller committed
180 181
</li><li>In Eclipse, create a new Java project from existing source code:
    <code>File, New, Project, Java Project, Create project from existing source</code>.
Thomas Mueller's avatar
Thomas Mueller committed
182
</li><li>Select the <code>h2</code> folder, click <code>Next</code> and <code>Finish</code>.
Thomas Mueller's avatar
Thomas Mueller committed
183
</li><li>To resolve <code>com.sun.javadoc</code> import statements,
Thomas Mueller's avatar
Thomas Mueller committed
184 185 186
    you may need to manually add the file <code>&lt;java.home&gt;/../lib/tools.jar</code> to the build path.
</li></ul>

Thomas Mueller's avatar
Thomas Mueller committed
187
<h2 id="translating">Translating</h2>
188 189 190 191
<p>
The translation of this software is split into the following parts:
</p>
<ul>
Thomas Mueller's avatar
Thomas Mueller committed
192 193
<li>H2 Console: <code>src/main/org/h2/server/web/res/_text_*.prop</code>
</li><li>Error messages: <code>src/main/org/h2/res/_messages_*.prop</code>
194 195
</li></ul>
<p>
196
To translate the H2 Console, start it and select Preferences / Translate.
Thomas Mueller's avatar
Thomas Mueller committed
197 198
After you are done, send the translated <code>*.prop</code> file to the Google Group.
The web site is currently translated using Google.
199 200
</p>

Thomas Mueller's avatar
Thomas Mueller committed
201
<h2 id="providing_patches">Providing Patches</h2>
202 203 204
<p>
If you like to provide patches, please consider the following guidelines to simplify merging them:
</p>
205
<ul><li>Only use Java 1.5 features (do not use Java 1.6) (see <a href="#environment">Environment</a>).
206 207
</li><li>Follow the coding style used in the project, and use Checkstyle (see above) to verify.
    For example, do not use tabs (use spaces instead).
208
    The checkstyle configuration is in <code>src/installer/checkstyle.xml</code>.
Thomas Mueller's avatar
Thomas Mueller committed
209 210 211
</li><li>A template of the Eclipse settings are in
    <code>src/installer/eclipse.settings/*</code>. If you want to use them,
    you need to copy them to the <code>.settings</code> directory.
Thomas Mueller's avatar
Thomas Mueller committed
212
    The formatting options (<code>eclipseCodeStyle</code>) are also included.
213
</li><li>Please provide test cases and integrate them into the test suite.
214 215 216
    For Java level tests, see <code>src/test/org/h2/test/TestAll.java</code>.
    For SQL level tests, see <code>src/test/org/h2/test/test.in.txt</code> or
    <code>testSimple.in.txt</code>.
217 218
</li><li>The test cases should cover at least 90% of the changed and new code;
    use a code coverage tool to verify that (see above).
219
    or use the build target <code>coverage</code>.
220
</li><li>Verify that you did not break other features: run the test cases by executing
221 222
    <code>build test</code>.
</li><li>Provide end user documentation if required (<code>src/docsrc/html/*</code>).
223
</li><li>Document grammar changes in <code>src/docsrc/help/help.csv</code>
224 225 226
</li><li>Provide a change log entry (<code>src/docsrc/html/changelog.html</code>).
</li><li>Verify the spelling using <code>build spellcheck</code>. If required
    add the new words to <code>src/tools/org/h2/build/doc/dictionary.txt</code>.
227
</li><li>Run <code>src/installer/buildRelease</code> to find and fix formatting errors.
228 229 230
</li><li>Verify the formatting using <code>build docs</code> and
    <code>build javadoc</code>.
</li><li>Submit patches as <code>.patch</code> files (compressed if big).
231
    To create a patch using Eclipse, use Team / Create Patch.
232
</li></ul>
233 234 235 236 237 238
<p>
For legal reasons, patches need to be public in the form of an email to the
<a href="http://groups.google.com/group/h2-database">group</a>, or in the form
of an <a href="http://code.google.com/p/h2database/issues/list">issue report or attachment</a>.
Significant contributions need to include the following statement:
</p>
239
<p>
240 241 242
"I wrote the code, it's mine, and I'm contributing it to H2 for distribution
multiple-licensed under the H2 License, version 1.0, and under the
Eclipse Public License, version 1.0 (http://h2database.com/html/license.html)."
243
</p>
244

245 246
<h2 id="support">Reporting Problems or Requests</h2>
<p>
247
Please consider the following checklist if you have a question, want to report a problem,
248 249
or if  you have a feature request:
</p>
250
<ul><li>Feature requests are always welcome, even if the feature is already on the
251 252
    <a href="roadmap.html">roadmap</a>. Your mail will help prioritize feature requests.
    If you urgently need a feature, consider <a href="#providing_patches">providing a patch</a>.
253
</li><li>Before posting problems, check the
254
    <a href="faq.html">FAQ</a> and do a <a href="http://google.com">Google search</a>.
255
</li><li>When got an unexpected exception, please try the
256
    <a href="sourceError.html">Error Analyzer tool</a>. If this doesn't help,
257
    please report the problem, including the complete error message and stack trace,
258 259 260 261 262 263 264 265
    and the root cause stack trace(s).
</li><li>When sending source code, please use a public web clipboard such as
    <a href="http://pastebin.com">Pastebin</a>,
    <a href="http://cl1p.net">Cl1p</a>, or
    <a href="http://www.mysticpaste.com/new">Mystic Paste</a>
    to avoid formatting problems.
    Please keep test cases as simple and short as possible,
    but so that the problem can still be reproduced.
266 267
    As a template, use:
    <a href="http://h2database.googlecode.com/svn/trunk/h2/src/test/org/h2/samples/HelloWorld.java">HelloWorld.java</a>.
268 269 270 271 272 273 274 275
    Method that simply call other methods should be avoided,
    as well as unnecessary exception handling.
    Please use the JDBC API and no external tools or libraries.
    The test should include all required initialization code, and
    should be started with the main method.
</li><li>For large attachments, use a public temporary storage such as
    <a href="http://rapidshare.com">Rapidshare</a>.
</li><li>Google Group versus issue tracking:
276
    Use the
277 278
    <a href="http://groups.google.com/group/h2-database">Google Group</a>
    for questions or if you are not sure it's a bug.
279
    If you are sure it's a bug, you can create an
280 281 282
    <a href="http://code.google.com/p/h2database/issues/list">issue</a>,
    but you don't need to (sending an email to the group is enough).
    Please note that only few people monitor the issue tracking system.
Thomas Mueller's avatar
Thomas Mueller committed
283
</li><li>For out-of-memory problems, please analyze the problem yourself first,
Thomas Mueller's avatar
Thomas Mueller committed
284
    for example using the command line option
Thomas Mueller's avatar
Thomas Mueller committed
285
    <code>-XX:+HeapDumpOnOutOfMemoryError</code>
Thomas Mueller's avatar
Thomas Mueller committed
286
    (to create a heap dump file on out of memory)
Thomas Mueller's avatar
Thomas Mueller committed
287
    and a memory analysis tool such as the
Thomas Mueller's avatar
Thomas Mueller committed
288
    <a href="http://www.eclipse.org/mat">Eclipse Memory Analyzer (MAT)</a>.
289 290 291
</li><li>It may take a few days to get an answers. Please do not double post.
</li></ul>

Thomas Mueller's avatar
Thomas Mueller committed
292
<h2 id="automated">Automated Build</h2>
293
<p>
294
This build process is automated and runs regularly.
295
The build process includes running the tests and code coverage, using the command line
296
<code>./build.sh clean jar coverage -Dh2.ftpPassword=... uploadBuild</code>.
297
The last results are available here:
298
</p>
299 300 301
<ul><li><a href="http://h2database.com/html/testOutput.html">Test Output</a>
</li><li><a href="http://h2database.com/coverage/overview.html">Code Coverage Summary</a>
</li><li><a href="http://h2database.com/coverage/coverage.zip">Code Coverage Details (download, 1.3 MB)</a>
302
</li><li><a href="http://www.h2database.com/automated/news.xml">Build Newsfeed</a>
303
</li><li><a href="http://www.h2database.com/automated/h2-latest.jar">Latest Jar File (download, 1 MB)</a>
304 305
</li></ul>

306 307
<h2 id="railroad">Generating Railroad Diagrams</h2>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
308
The railroad diagrams of the <a href="grammar.html">SQL grammar</a> are HTML, formatted as nested tables.
309 310 311 312 313 314 315 316 317 318 319
The diagrams are generated as follows:
</p>
<ul><li>The BNF parser (<code>org.h2.bnf.Bnf</code>) reads and parses the BNF from the file <code>help.csv</code>.
</li><li>The page parser (<code>org.h2.server.web.PageParser</code>) reads the template HTML file and fills in the diagrams.
</li><li>The rail images (one straight, four junctions, two turns) are generated using a simple Java application.
</li></ul>
<p>
To generate railroad diagrams for other grammars, see the package <code>org.h2.jcr</code>.
This package is used to generate the SQL-2 railroad diagrams for the JCR 2.0 specification.
</p>

320 321
<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>