blob: 157aafdef3e98705f1972ffc39aa8e3519879aa6 [file] [log] [blame] [view]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Asynchronous Native Java Client for Kudu
System Requirements
------------------------------------------------------------
- Java 7
- Maven 3
- protobuf 2.6.1 (it needs to be the exact version)
Building the Client
------------------------------------------------------------
$ mvn package -DskipTests
The client jar will can then be found at kudu-client/target.
Running the Tests
------------------------------------------------------------
The unit tests will start a master and a tablet
server using the flags file located in the src/test/resources/
directory. The tests will locate the master and tablet server
binaries by looking in 'build/latest/bin' from the root of
the git repository. If you have recently built the C++ code
for Kudu, those should be present already.
Once everything is setup correctly, run:
$ mvn test
If for some reason the binaries aren't in the expected location
as shown above, you can pass
-DbinDir=/path/to/directory.
Integration tests, including tests which cover Hadoop integration,
may be run with:
$ mvn verify
State of Eclipse integration
------------------------------------------------------------
Maven projects can be integrated with Eclipse in one of two
ways:
1. Import a Maven project using Eclipse's m2e plugin.
2. Generate Eclipse project files using maven's
maven-eclipse-plugin plugin.
Each approach has its own pros and cons.
## m2e integration (Eclipse to Maven)
The m2e approach is generally recommended as m2e is still
under active development, unlike maven-eclipse-plugin. Much
of the complexity comes from how m2e maps maven lifecycle
phases to Eclipse build actions. The problem is that m2e
must be told what to do with each maven plugin, and this
information is either conveyed through explicit mapping
metadata found in pom.xml, or in an m2e "extension". m2e
ships with extensions for some of the common maven plugins,
but not for maven-antrun-plugin or maven-protoc-plugin. The
explicit metadata mapping found in kudu-client/pom.xml has
placated m2e in both cases (in Eclipse see
kudu-client->Properties->Maven->Lifecycle Mapping).
Nevertheless, maven-protoc-plugin isn't being run correctly.
To work around this, you can download, build, and install a
user-made m2e extension for maven-protoc-plugin:
http://www.masterzen.fr/2011/12/25/protobuf-maven-m2e-and-eclipse-are-on-a-boat
See http://wiki.eclipse.org/M2E_plugin_execution_not_covered
for far more excruciating detail.
## maven-eclipse-plugin (Maven to Eclipse)
The maven-eclipse-plugin approach, despite being old
fashioned and largely unsupported, is easier to use. The
very first time you want to use it, run the following:
$ mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:configure-workspace
This will add the M2_REPO classpath variable to Eclipse. You
can verify this in
Preferences->Java->Build Path->Classpath Variables. It
should be set to `/home/<user>/.m2/repository`.
To generate the Eclipse project files, run:
$ mvn eclipse:eclipse
If you want to look at Javadoc/source in Eclipse for
dependent artifacts, run:
$ mvn eclipse:eclipse -DdownloadJavadocs=true -DdownloadSources=true
So what's the problem with maven-eclipse-plugin? The issue
lies with maven-protoc-plugin. Because all of our .proto
files are in src/kudu, the "resource path" in
maven-protoc-plugin must be absolute and prefixed with
${project.baseDir). This absolute path is copied verbatim
to an Eclipse .classpath <classpathentry/>, and Eclipse
doesn't know what to do with it, causing it avoid building
kudu-client altogether. Other plugins (like
maven-avro-plugin) don't seem to have this problem, so it's
likely a bug in maven-protoc-plugin.
There's a simple workaround: delete the errant folder within
Eclipse and refresh the kudu-client project.
Building the Kudu Custom Service Descriptor (CSD)
------------------------------------------------------------
By default, the Kudu CSD will not be built with the client
and isn't needed by any API.
It requires access to the Kudu binaries which have to be built
prior to building this module.
Here's how to build the kudu-csd module:
$ mvn package -DskipTests -PbuildCSD
Also by default, building the CSD does not validate it,
because (for the moment) this requires access to an internal
Cloudera repository containing the validator maven plugin.
Here's how to build the kudu-csd module with validation:
$ mvn package -DskipTests -PbuildCSD -PvalidateCSD