hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Vimont <dan...@commonvox.org>
Subject [DISCUSS] new build infrastructure for creation/maintenance of hbase maven archetypes (HBASE-14877)
Date Wed, 27 Jan 2016 07:07:44 GMT
Work has been underway for the last month on task HBASE-14877
<https://issues.apache.org/jira/browse/HBASE-14877>, the first subtask of
HBASE-14876 (in Nick's original wording from that JIRA entry: "To help
onboard new users, we should *provide maven archetypes for hbase client

The three originally proposed *Maven archetypes* in HBASE-14876 were split
into three subtasks, for:

   1. an hbase-client dependent application,
   2. an hbase-shaded-client dependent application, and
   3. a map-reduce job example with hbase-server dependency.

*(Note that a fourth subtask has since been added -- for an hbase-spark
oriented archetype.)*

*The first subtask (HBASE-14877) provides:*

*[a] a new infrastructure* for creation and maintenance of HBase-related
Maven archetypes, and
[*b] the first archetype* from the list above (to be used by end-users to
autogenerate a fully-configured Maven project with hbase-client dependency
and fully-functional sample Java code).

*It is item [a] above -- a new infrastructure for creation/maintenance of
archetypes -- that we would particularly like for contributors/committers
to take a look at, and to offer up comments, questions, suggestions, etc.*
The README text in the new hbase-archetypes subdirectory is intended to be
a brief yet comprehensive introduction to how this new infrastructure
works, and how a contributor would add new Maven archetypes in the future. *(It
is intended that it be very simple to contribute new archetypes, without
the need for any special expertise with regard to Maven archetypes in

For ease of access, I'll just paste in the README text below. *(Note that
this text will soon be reformatted into markdown format, but this is the
intended content.)*

Besides reviewing this text, you can earn extra gratitude-points if you:

*set up a sandbox environment, *
*install the latest patch (HBASE-14877-v4.patch
   against the HBase master branch, *
*follow the instructions at the end of the README (below) to generate a new
   project from the archetype (emulating the experience of an end-user), and *
   - *review the results of that process, as well!*

Dan Vimont

*The hbase-archetypes subproject of hbase provides an infrastructure for*
*creation and maintenance of Maven archetypes[1] pertinent to HBase. Upon*
*deployment to the archetype catalog[2] of the central Maven repository[3],*
*these archetypes may be used by end-user developers to autogenerate
*configured Maven projects (including fully-functioning sample code)
*invocation of the archetype:generate goal of the

*Notes for contributors and committers to the HBase project*
*The hbase-archetypes project contains a separate subproject for each
*The top level components of such a subproject comprise a complete,
*exemplar Maven project containing (a) a src directory with sample, fully-*
*functioning code in the ./main and ./test subdirectories, (b) a pom.xml
*defining all required dependencies, and (c) any additional resources
*by the exemplar project. (For example, the components of the hbase-client-*
*project consist of (a) sample code ./src/main/.../HelloHBase.java and*
*./src/test/.../TestHelloHBase.java, (b) a pom.xml file establishing
*upon hbase-client and test-scope dependency upon hbase-testing-util, and
(c) a*
*log4j.properties resource file.)*

*** Overview of the creation of archetypes during the hbase install
process: ***
*During the mvn install process, all standalone exemplar projects in the*
*hbase-archetypes subdirectory are first packaged/tested/installed, and
then the*
*following steps are executed in hbase-archetypes/hbase-archetype-builder
*the pom.xml, bash scripts, and xsl templates in that subdirectory):*
*  (1) For each exemplar project, resources are copied (via
*plugin) and transformed (via xml-maven-plugin xslt functionality) to the*
*exemplar project's ./target/build-archetype subdirectory[5].*
*  (2) The script createArchetypes.sh is executed to invoke the
*plugin's create-from-project goal within each exemplar project's*
*./target/build-archetype subdirectory. For each exemplar project, this
*a corresponding Maven archetype in the ./target/build-*
*archetype/target/generate-sources/archetype subdirectory. (Note that this
*always issues two platform-encoding warnings per archetype, due to
*behavior of the maven-archetype-plugin[6].)*
*  (3) The pom.xml file of each newly-created archetype is copied (via
*resources-plugin) and transformed (via xml-maven-plugin xslt
*  (4) The script installArchetypes.sh is executed to install each
*into the local Maven repository, ready for deployment to the central Maven*
*repository. (Note that installation of an archetype automatically includes*
*invocation of integration-testing prior to install, which performs a test*
*generation of a project from the archetype.)*

*** To add a new archetype to the hbase-archetypes collection: ***
*  (1) Create a new subdirectory in hbase-archetypes, populated with a*
*completely configured Maven project, which will serve as the exemplar
*of the new archetype. (It may be most straightforward to simply copy the
*and pom.xml components from one of the existing exemplar projects, replace
*src/main and src/test code, and modify the pom.xml file's <dependencies>,*
*<artifactId>, <name>, and <description> elements.)*
*  (2) Modify the hbase-archetype-builder/pom.xml file: (a) add the new
*project to the <modules> element, and (b) add appropriate <execution>
*and <transformationSet> elements within the <plugin> elements (using the*
*existing entries from already-existing exemplar projects as a guide).*
*  (3) Add appropriate entries for the new exemplar project to the*
*createArchetypes.sh and installArchetypes.sh scripts in the
*builder subdirectory (using the existing entries as a guide).*

*** For additional testing/inspection of an archetype in this collection:
*Although integration-testing (which is automatically performed for each*
*archetype during the install process) already performs test generation of
*project from an archetype, it may often be advisable to do further manual*
*testing of a newly built and installed archetype, particularly to examine
*test a project generated from the archetype (mimicking the end-user
*of utilizing the archetype). Upon completion of the install process
*above, all archetypes will have been installed in the local Maven
*and can be tested locally by executing the following:*
*    mvn archetype:generate -DarchetypeCatalog=local*
*This displays a numbered list of all locally-installed archetypes for the
*to choose from for generation of a new Maven project.*
*END of notes for contributors and committers to the HBase project*

*[1] http://maven.apache.org/archetype/index.html
*[2] http://repo1.maven.org/maven2/archetype-catalog.xml
*[3] http://search.maven.org/ <http://search.maven.org/>*
*[5] Prior to archetype creation, each exemplar project's pom.xml is
*    as follows to make it into a standalone project: resource filtering*
*    replaces ${project.version} with the literal value of the current*
*    project.version; and xslt tranformation (a) copies <groupId> and
*    subelements of <parent> to make them child elements of the root
*    and (b) removes the <parent> and <description> elements.*
*[6] For an explanation of the platform-encoding warning issued during*
*    maven-archetype-plugin processing, see the first answer to this*
*    stackoverflow posting: http://stackoverflow.com/a/24161287/4112172
*[7] Prior to archetype installation, each archetype's pom.xml is
*    as follows: a <project.build.sourceEncoding> subelement with value*
*    'UTF-8' is added to the <properties> element. This prevents*
*    platform-encoding warnings from being issued when an end-user
*    a project from the archetype.*

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message