build.html 13.9 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 4
Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
and the EPL 1.0 (http://h2database.com/html/license.html).
5 6 7
Initial Developer: H2 Group
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
8 9
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
Thomas Mueller's avatar
Thomas Mueller committed
10
<meta name="viewport" content="width=device-width, initial-scale=1" />
11
<title>
12
Build
13 14
</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
15 16 17 18 19 20
<!-- [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">
<!-- } -->

21
<h1 id="build_index">Build</h1>
22 23 24 25 26 27 28 29 30 31
<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
32 33
<a href="#using_eclipse">
    Using Eclipse</a><br />
34 35 36
<a href="#translating">
    Translating</a><br />
<a href="#providing_patches">
37
    Submitting Source Code Changes</a><br />
38 39
<a href="#support">
    Reporting Problems or Requests</a><br />
40 41
<a href="#automated">
    Automated Build</a><br />
42 43
<a href="#railroad">
    Generating Railroad Diagrams</a><br />
44

Thomas Mueller's avatar
Thomas Mueller committed
45
<h2 id="portability">Portability</h2>
46 47 48 49
<p>
This database is written in Java and therefore works on many platforms.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
50
<h2 id="environment">Environment</h2>
51
<p>
52
To run this database, a Java Runtime Environment (JRE) version 7 or higher is required.
53 54
</p>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
55 56
To create the database executables, the following software stack was used.
To use this database, it is not required to install this software however.
57
</p>
58
<ul><li>Mac OS X and Windows
59 60
</li><li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Oracle JDK Version 7</a>
(version 7 is not available for free download any more)
61
</li><li><a href="http://www.eclipse.org">Eclipse</a>
62
</li><li>Eclipse Plugins:
Thomas Mueller's avatar
Thomas Mueller committed
63
    <a href="http://subclipse.tigris.org">Subclipse</a>,
64
    <a href="https://checkstyle.github.io/eclipse-cs/">Eclipse Checkstyle Plug-in</a>,
65
    <a href="http://www.eclemma.org">EclEmma Java Code Coverage</a>
66
</li><li><a href="https://www.mozilla.com/firefox">Mozilla Firefox</a>
Thomas Mueller's avatar
Thomas Mueller committed
67
</li><li><a href="http://www.openoffice.org">OpenOffice</a>
68
</li><li><a href="http://nsis.sourceforge.net">NSIS</a> (Nullsoft Scriptable Install System)
Thomas Mueller's avatar
Thomas Mueller committed
69
</li><li><a href="http://maven.apache.org">Maven</a>
70 71
</li></ul>

Thomas Mueller's avatar
Thomas Mueller committed
72
<h2 id="building">Building the Software</h2>
73
<p>
74
You need to install a JDK, for example the Oracle JDK version 7 or 8.
75 76 77
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:
78
</p>
79
<pre>
80 81 82
build -?
</pre>
<p>
83
For Linux and OS X, use <code>./build.sh</code> instead of <code>build</code>.
84 85
</p>
<p>
86
You will get a list of targets. If you want to build the <code>jar</code> file, execute (Windows):
87
</p>
88
<pre>
89 90
build jar
</pre>
91
<p>
92
To run the build tool in shell mode, use the command line option <code>-</code>:
93
</p>
94 95 96
<pre>
./build.sh -
</pre>
97

Thomas Mueller's avatar
Thomas Mueller committed
98
<h2 id="build_targets">Build Targets</h2>
99 100 101
<p>
The build system can generate smaller jar files as well. The following targets are currently supported:
</p>
102 103 104 105
<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>.
106
    This only contains the embedded database. Debug information is disabled.
107
</li><li><code>javadocImpl</code> creates the Javadocs of the implementation.
108 109
</li></ul>
<p>
110
To create the file <code>h2client.jar</code>, go to the directory <code>h2</code> and execute the following command:
111
</p>
112
<pre>
113 114 115
build jarClient
</pre>

116
<h3>Using Apache Lucene</h3>
Thomas Mueller's avatar
Thomas Mueller committed
117
<p>
Andrei Tokar's avatar
Andrei Tokar committed
118
Apache Lucene 5.5.5 is used for testing.
119
Newer versions up to 7.6.0 can also be used.
Thomas Mueller's avatar
Thomas Mueller committed
120 121
</p>

Thomas Mueller's avatar
Thomas Mueller committed
122
<h2 id="maven2">Using Maven 2</h2>
123 124 125 126 127
<h3>Using a Central Repository</h3>
<p>
You can include the database in your Maven 2 project as a dependency.
Example:
</p>
128
<pre>
129 130 131 132 133 134 135 136
&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
137 138
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.
139
</p>
Thomas Mueller's avatar
Thomas Mueller committed
140 141 142
<h3>Maven Plugin to Start and Stop the TCP Server</h3>
<p>
A Maven plugin to start and stop the H2 TCP server is available from
143
<a href="https://github.com/ljnelson/h2-maven-plugin">Laird Nelson at GitHub</a>.
Thomas Mueller's avatar
Thomas Mueller committed
144 145 146 147 148 149 150 151 152 153 154
To start the H2 server, use:
</p>
<pre>
mvn com.edugility.h2-maven-plugin:1.0-SNAPSHOT:spawn
</pre>
<p>
To stop the H2 server, use:
</p>
<pre>
mvn com.edugility.h2-maven-plugin:1.0-SNAPSHOT:stop
</pre>
155 156 157

<h3>Using Snapshot Version</h3>
<p>
158
To build a <code>h2-*-SNAPSHOT.jar</code> file and upload it the to the local Maven 2 repository, execute the following command:
159
</p>
160
<pre>
161 162 163 164 165
build mavenInstallLocal
</pre>
<p>
Afterwards, you can include the database in your Maven 2 project as a dependency:
</p>
166
<pre>
167 168 169 170 171 172 173
&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
174 175 176 177
<h2 id="using_eclipse">Using Eclipse</h2>
<p>
To create an Eclipse project for H2, use the following steps:
</p>
178
<ul><li>Install Git and <a href="http://www.eclipse.org">Eclipse</a>.
179 180 181 182 183
</li><li>Get the H2 source code from Github:<br />
    <code>git clone https://github.com/h2database/h2database</code>
</li><li>Download all dependencies:<br />
    <code>build.bat download</code>(Windows)<br />
    <code>./build.sh download</code>(otherwise)<br />
Thomas Mueller's avatar
Thomas Mueller committed
184 185
</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
186
</li><li>Select the <code>h2</code> folder, click <code>Next</code> and <code>Finish</code>.
Thomas Mueller's avatar
Thomas Mueller committed
187
</li><li>To resolve <code>com.sun.javadoc</code> import statements,
Thomas Mueller's avatar
Thomas Mueller committed
188 189 190
    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
191
<h2 id="translating">Translating</h2>
192 193 194 195
<p>
The translation of this software is split into the following parts:
</p>
<ul>
Thomas Mueller's avatar
Thomas Mueller committed
196 197
<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>
198 199
</li></ul>
<p>
200
To translate the H2 Console, start it and select Preferences / Translate.
Thomas Mueller's avatar
Thomas Mueller committed
201 202
After you are done, send the translated <code>*.prop</code> file to the Google Group.
The web site is currently translated using Google.
203 204
</p>

205
<h2 id="providing_patches">Submitting Source Code Changes</h2>
206
<p>
207
If you'd like to contribute bug fixes or new features, please consider the following guidelines to simplify merging them:
208
</p>
209
<ul><li>Only use Java 7 features (do not use Java 8/9/etc) (see <a href="#environment">Environment</a>).
210 211
</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).
212
    The checkstyle configuration is in <code>src/installer/checkstyle.xml</code>.
Thomas Mueller's avatar
Thomas Mueller committed
213 214 215
</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
216
    The formatting options (<code>eclipseCodeStyle</code>) are also included.
217
</li><li>Please provide test cases and integrate them into the test suite.
218
    For Java level tests, see <code>src/test/org/h2/test/TestAll.java</code>.
219
    For SQL level tests, see SQL files in <code>src/test/org/h2/test/scripts</code>.
220 221
</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).
222
    or use the build target <code>coverage</code>.
223
</li><li>Verify that you did not break other features: run the test cases by executing
224 225
    <code>build test</code>.
</li><li>Provide end user documentation if required (<code>src/docsrc/html/*</code>).
226
</li><li>Document grammar changes in <code>src/docsrc/help/help.csv</code>
227 228 229
</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>.
230
</li><li>Run <code>src/installer/buildRelease</code> to find and fix formatting errors.
231 232
</li><li>Verify the formatting using <code>build docs</code> and
    <code>build javadoc</code>.
233 234 235
</li><li>Submit changes using GitHub's "pull requests". You'll require a free <a href="https://github.com/">GitHub</a>
    account. If you are not familiar with pull requests, please read GitHub's
    <a href="https://help.github.com/articles/using-pull-requests/">Using pull requests</a> page.
236
</li></ul>
237
<p>
238 239
For legal reasons, patches need to be public in the form of an
    <a href="https://github.com/h2database/h2database/issues">issue report or attachment</a> or in the form of an email
240
    to the <a href="https://groups.google.com/group/h2-database">group</a>.
241 242
Significant contributions need to include the following statement:
</p>
243
<p>
244
"I wrote the code, it's mine, and I'm contributing it to H2 for distribution
245 246
multiple-licensed under the MPL 2.0, and the EPL 1.0
(http://h2database.com/html/license.html)."
247
</p>
248

249 250
<h2 id="support">Reporting Problems or Requests</h2>
<p>
251
Please consider the following checklist if you have a question, want to report a problem,
252 253
or if  you have a feature request:
</p>
Thomas Mueller's avatar
Thomas Mueller committed
254
<ul><li>For bug reports, please provide a
Thomas Mueller's avatar
Thomas Mueller committed
255 256
    <a href="http://sscce.org/">short, self contained, correct (compilable), example</a> of the problem.
</li><li>Feature requests are always welcome, even if the feature is already on the
257
    <a href="http://www.h2database.com/html/roadmap.html">roadmap</a>. Your mail will help prioritize feature requests.
258
    If you urgently need a feature, consider <a href="#providing_patches">providing a patch</a>.
259
</li><li>Before posting problems, check the
260
    <a href="faq.html">FAQ</a> and do a <a href="http://google.com">Google search</a>.
261
</li><li>When got an unexpected exception, please try the
262
    <a href="http://www.h2database.com/html/sourceError.html">Error Analyzer tool</a>. If this doesn't help,
263
    please report the problem, including the complete error message and stack trace,
264 265
    and the root cause stack trace(s).
</li><li>When sending source code, please use a public web clipboard such as
266
    <a href="https://pastebin.com/">Pastebin</a> or
267 268 269 270
    <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.
271
    As a template, use:
272
    <a href="https://github.com/h2database/h2database/tree/master/h2/src/test/org/h2/samples/HelloWorld.java">HelloWorld.java</a>.
273 274 275 276 277
    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.
278 279
</li><li>For large attachments, use a public storage such as
    <a href="https://www.google.com/drive/">Google Drive</a>.
280
</li><li>Google Group versus issue tracking:
281
    Use the
282 283
    <a href="http://groups.google.com/group/h2-database">Google Group</a>
    for questions or if you are not sure it's a bug.
284
    If you are sure it's a bug, you can create an
285
    <a href="https://github.com/h2database/h2database/issues">issue</a>,
286 287
    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
288
</li><li>For out-of-memory problems, please analyze the problem yourself first,
Thomas Mueller's avatar
Thomas Mueller committed
289
    for example using the command line option
Thomas Mueller's avatar
Thomas Mueller committed
290
    <code>-XX:+HeapDumpOnOutOfMemoryError</code>
Thomas Mueller's avatar
Thomas Mueller committed
291
    (to create a heap dump file on out of memory)
Thomas Mueller's avatar
Thomas Mueller committed
292
    and a memory analysis tool such as the
Thomas Mueller's avatar
Thomas Mueller committed
293
    <a href="http://www.eclipse.org/mat">Eclipse Memory Analyzer (MAT)</a>.
294 295 296
</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
297
<h2 id="automated">Automated Build</h2>
298
<p>
299
This build process is automated and runs regularly.
300
The build process includes running the tests and code coverage, using the command line
301
<code>./build.sh clean jar coverage -Dh2.ftpPassword=... uploadBuild</code>.
302
The last results are available here:
303
</p>
304 305 306
<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>
307
</li><li><a href="http://www.h2database.com/automated/news.xml">Build Newsfeed</a>
308 309
</li></ul>

310 311
<h2 id="railroad">Generating Railroad Diagrams</h2>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
312
The railroad diagrams of the <a href="grammar.html">SQL grammar</a> are HTML, formatted as nested tables.
313 314 315 316 317 318 319 320 321 322 323
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>

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