Skip to content

Commits on Source 8

......@@ -9,6 +9,7 @@ target
.classpath
.project
.settings
.externalToolBuilders
# External tools.
.clover
......@@ -16,3 +17,7 @@ target
# Locally generated
.builder.classpath
.benchmark.*.db
# IntelliJ
.idea/
*.iml
\ No newline at end of file
ALTERNATIVES
------------
HPPC was written for selfish needs and because (at the time it was conceived) no
other library offered a commercially permissive license.
Nowadays there are a number of options to choose from (alphabetically).
* fastutil (by Sebastiano Vigna), http://fastutil.di.unimi.it/
A very flexible, Apache licensed set of collections and algorithms.
Compatible with Java Collections.
* HPPC-RT (by Vincent Sonnier), https://github.com/vsonnier/hppc
A fork of HPPC for real-time computing, minimizes allocations, introduces
overhead-less iterators and other miscellaneous goodies.
* Koloboke (by Roman Leventov), https://github.com/OpenHFT/Koloboke
A very impressive library that offers unprecedented speed and features.
Includes support for Java8 (including Collections compatibility).
* PCJ (by Søren Bak), http://pcj.sourceforge.net/
The grand-daddy of them all. :) DO NOT use it, it contains bugs. But it
deserves to be mentioned nonetheless.
* Trove, https://bitbucket.org/robeden/trove/
If you're a GNU fan, this may be just the sweet spot for you.
[0.7.2]
Released on October 25th, 2016
http://issues.carrot2.org/secure/ReleaseNote.jspa?projectId=10070&version=12632
** Other changes
PR #5: OSGi descriptors in JAR manifests, bundle packaging. (Guillaume
Delafosse)
[0.7.1]
Released on May 7th, 2015
http://issues.carrot2.org/secure/ReleaseNote.jspa?projectId=10070&version=12628
** New features
HPPC-159: Add .visualizeKeyDistribution(int characters) to maps and sets
** Bug fixes
HPPC-156: forEach iterators spin loop endlessly on *HashSet and *ScatterSet.
HPPC-158: *ScatterMap.from should shadow *HashMap.from with proper covariant.
HPPC-155: *ScatterSet.from should shadow *HashSet.from with proper covariant.
[0.7.0]
Released on May 5th, 2015
http://issues.carrot2.org/secure/ReleaseNote.jspa?projectId=10070&version=12421
** API-breaking changes
HPPC-117: A summary of API changes resulting from other issues.
* (HPPC-118) Direct generic buffers are declared Object[].
Should not affect runtime code (Object[] casts were required
anyway).
* (HPPC-106) Guava adapters dropped. Copy to your own code
from previous HPPC release if required.
* 1.7 compatibility only. static factories removed, use diamonds.
T.newInstanceWithCapacity(*) -> removed, use new T<>(*)
T.newInstanceWithExpectedSize(*) -> removed, use new T<>(*)
T.newInstance(*) -> removed, use new T<>(*)
T.from(container) -> removed, use new T<>(container)
* EmptyArrays has been removed. Empty arrays are now a static
constant in each *ArrayList.
* (HPPC-97) Removed allocated[] fields from hash containers. If
you used explicit loops utilizing allocated[] you should rewrite
them to use cursors or other form of iteration instead (it will
be simpler than taking care of the empty slot marker).
* (HPPC-146) Removed DoubleLinkedIntSet.
* (HPPC-115) Hash containers now, by default, use a random internal
mixing seed to reorder entries (so the order of keys is not
constant from execution to execution). See detailed HPPC-115 entry
below.
* (HPPC-121) Renamed methods:
T.removeFirstOccurrences -> T.removeFirst
T.removeLastOccurrences -> T.removeLast
T.removeAllOccurrences -> T.removeAll(type)
* (HPPC-123) Dropped MurmurHash3 class entirely.
* (HPPC-125) The semantics of how equals works has changed (a container
can be equal only if the comparison's target is of the same
class and contains the same entries.
* (HPPC-129) ArraySizingStrategy#round() method has been removed
completely.
* (HPPC-130) removeAll(KTypeLookupContainer) had an incorrect
generic signature of:
public int removeAll(final KTypeLookupContainer<? extends KType> c)
now corrected to:
public int removeAll(final KTypeLookupContainer<? super KType> c)
(for primitive types this does not apply).
* (HPPC-131) retainAll(KTypeLookupContainer) had an incorrect
generic signature of:
public int retainAll(final KTypeLookupContainer<? extends KType> c)
now corrected to:
public int retainAll(final KTypeLookupContainer<? super KType> c)
(for primitive types this does not apply).
* (HPPC-133) KTypeContainer.toArray(Class<T>) now accepts any array
component type; runtime checks will throw ArrayStoreException if not
compatible.
* (HPPC-135) KTypeVTypeAssociativeContainer#removeAll had an incorrect
generic signature of:
public int removeAll(KTypeContainer<? extends KType> container)
now corrected to:
public int removeAll(KTypeContainer<? super KType> container)
* (HPPC-116): Dropped methods that required a memory write (lset, lget,
lkey) and replaced them with methods that take a logical "index" of a
key:
int indexOf(KType);
boolean indexExists(int index);
VType indexGet(int index);
VType indexReplace(int index, VType newValue);
void indexInsert(int index, KType key, VType value);
So, for example:
int index;
if ((index = map.indexOf(key)) >= 0) {
// key exists, do something with the value.
doSomething(map.indexGet(index));
} else {
// Insert the new key-value pair.
map.indexInsert(index, key, newValue);
}
* (HPPC-141): Dropped mutable type wrappers.
* (HPPC-144): Several less-frequently used classes have been moved to
a separate JAR file. See full description of HPPC-144 below.
* (HPPC-145): Removed any "Open" infix from all classes:
KTypeOpenHashSet -> KTypeHashSet
KTypeVTypeOpenHashMap -> KTypeVTypeHashMap
* (HPPC-152) XorShiftRandom has been removed and replaced with a
simpler, int-only PRNG XorShift128+ (XorShift128P).
** New features
HPPC-150: Make the default key mixing strategy globally configurable (via
"hppc.bitmixer" sysprop). This property allows switching from
random bit mixer strategy to any of the following:
- random
the default strategy. Varies bit mixer per instance.
- deterministic
the default strategy in HPPC up to v. 0.6.x. Varies bit
mixer depending on hash container size.
- none
No bit mixing is used (hash sets/maps become scatter sets/ maps).
This is a last-resort, discouraged, property. Your code should not
rely on hash map/set ordering. Your code should use scatter maps when
speed is of absolute importance and there are guarantees that keys
won't be copied around to other associative containers.
HPPC-145: Removed any "Open" infix from all classes.
HPPC-144: Moved certain esoteric key/value containers to a separate JAR. This
JAR has an identical dependency as main HPPC jar, but is declared with
an "esoteric" classifier. The following containers are included
in the set of "esoteric" ones:
* all associative containers with Byte* keys
* all associative containers with Float* keys
* all associative containers with Double* keys
Byte-keyed containers are very infrequent (just create a plain array
for values). Hash containers keyed by a floating-point type are odd
and may lead to confusion. The problem is how the "key" should be
normalized from fixed-bit representation and then internally compared.
If fp normalization is applied (like Double.doubleToLongBits) then
the value one puts in a set or a map may be different from the value
later retrieved while iterating over the set of keys. On the other
hand, if one takes raw floating point values (for example
Double.doubleToRawLongBits) then there are awkward side-effects
(like various types of NaNs can be stored as separate keys, for
example).
All floating-point "esoterics" use proper normalization, but it is
strongly advised to manually apply the floating point-fixed-point
conversion (normalization) in the target code and just use
a corresponding fixed-point associative container for storing
normalized values.
HPPC-143: Added KTypeScatterSet and KTypeVTypeScatterMap. These classes are
specializations of KTypeHashSet and KTypeVTypeHashMap with
a simpler bit distribution function and no bit mixers. They are
useful for key existence checks or counting but should not be
propagated across containers.
HPPC-134: Set and Map's removeAll() should pick the best removal strategy.
HPPC-139: Added release() to the API (clears and releases internal buffers).
HPPC-116: Drop methods that require memory write (lset, lget, lkey) and replace
them with methods that take a logical "index" of a key.
HPPC-115: Provide better guard against key clustering leading to
exponential times.
HPPC-97: Use unallocated slot marker key instead of an explicit
allocation table for hash containers. This should result in memory
savings and even speedups resulting from fewer memory accesses.
HPPC-112: ensureCapacity(elements) added to all containers.
HPPC-113: Clean up the definition of "capacity" vs. buffer size. Initial
capacity is now the number of elements that can be stored without
hash container rehash.
A few methods have been removed or renamed because the meaning of
"capacity" and presizing for the given number of expected elements
is now equivalent. See API changes.
HPPC-114: Buffer resizing and allocation should be throwing non-assertion
mode exceptions. This is an unchecked exception. It will also
leave the data structure in a consistent state.
** Bug fixes
HPPC-135: KTypeVTypeAssociativeContainer#removeAll had an incorrect generic
signature.
HPPC-133: KTypeContainer.toArray(Class) can return incorrect array type.
HPPC-131: retainAll(KTypeLookupContainer) had an incorrect generic
signature.
HPPC-130: removeAll(KTypeLookupContainer) had an incorrect generic
signature.
HPPC-115: Hash containers now, by default, use a random internal
mixing seed to reorder entries. This is done to prevent a potential
(but likely!) case of exponential costs of merging keys from two
or more containers. If you desperately need non-permuted order,
use an explicit constructor and pass HashOrderMixing.none()
as the mixing strategy. Carefully weigh the risk of stalling your
program with data-related deadlocks; this is only useful if you're
using hash container as a scatter table (without merging it with
anything else).
You can also provide your own strategy to get predictable hash
key ordering. Just make sure the mix seed is different from container
to container (for example by using a thread local increment
counter or something like that).
** Other changes
HPPC-152: Remove XorShiftRandom (add a simpler RPRG: XorShift128+).
HPPC-149: Recognize tests.seed as the initialization seed for randomized
key mix strategies.
HPPC-102: Use Arrays.copyOf instead of new[]+System.arraycopy() for resizing
arrays.
HPPC-141: Dropped mutable type wrappers (*Holder).
HPPC-128: The preprocessor (intrinsics, preprocessor) is now deployed as part
of the official release.
HPPC-138: Move Intrinsics class to the generator project. Add forbidden-API
checks to ensure intrinsics are replaced.
HPPC-137: An overhaul of intrinsics (equality comparisons, no vtype/ ktype
distinction, etc.)
HPPC-129: ArraySizingStrategy#round() method has been removed completely.
HPPC-125: The equals method should not return true when comparing against
subclasses of the current object. This can be very misleading,
especially when the subclass has a different implementation of
key comparisons, etc.
HPPC-123: Dropped MurmurHash3 class entirely.
HPPC-121: Rename remove{All|First|Last}Occurrence(s) to
remove{All|First|Last}(key).
HPPC-146: Removed IntDoubleLinkedSet.
HPPC-120: Rework entry shifting routine to be less hairy.
HPPC-106: Drop Guava adapter (and dependency).
HPPC-118: Buffers for generic classes are now declared as Object[] and not as
generic type array. This prevents problems with compiler-injected
casts (it does not matter for the erased type but matters in user
code).
HPPC-105: Cleanup project structure and IDE integration.
HPPC-109: Moved @author tags to NOTICE.txt.
[0.6.1]
http://issues.carrot2.org/secure/ReleaseNote.jspa?projectId=10070&version=12420
......
HPPC tries to be open but sometimes people will have very specific
needs or wishes that are hard to accomodate in the main code line.
Here is a list of "friends" -- forks which implement certain features
or aspects that didn't make it into HPPC but are still worth
investigating (perhaps they'll be more useful to you than HPPC itself!).
* HPPC-RT (by Vincent Sonnier), https://github.com/vsonnier/hppc
A fork for real-time HPPC, minimizes allocations, introduces cool
overhead-less iterators and other miscellaneous goodies.
Maven shortcuts
---------------
# Clean everything
mvn clean
# Generate Eclipse project files (the setup is a bit complex, so use this!)
mvn compile eclipse:eclipse
# All unit tests
mvn clean test
# Install packages in a local repository.
mvn clean install
# Create a distribution package
mvn clean package -Prelease
hppc-core targets
-----------------
# Run tests with clover
mvn -Pclover
# Generate code quality reports
mvn -Pclover site
Deployment
----------
# Deploy a snapshot of artefacts to SonaType's snapshots repo
mvn clean deploy
# Deploy a release
mvn -Psign,release,site-labs clean package deploy
Clover
------
A local license is required for Clover support. Edit your ~/.m2/settings.xml and
add an active profile definiting these settings:
...
<profiles>
<profile>
<id>clover-license</id>
<properties>
<clover.license.path>[...]\clover.license</clover.license.path>
<maven.clover.licenseLocation>[...]\clover.license</maven.clover.licenseLocation>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>clover-license</activeProfile>
</activeProfiles>
...
Maven shortcuts
---------------
# All unit tests
mvn clean verify
# Package JAR files, no tests.
mvn clean package -Pquick
Eclipse workflow/ import
------------------------
# Install template processor and copy over initial IDE .settings
mvn -Peclipse
# Ready to use m2e: "File->Import->Existing Maven Projects".
Benchmarking
------------
There are some sanity tests and isolated benchmarks
of common operations in hppc-benchmarks.
# Create benchmark JAR
mvn package -Pquick -am -pl :hppc-benchmarks
# List available benchmarks
java -jar hppc-benchmarks/target/benchmarks.jar -l
ACKNOWLEDGEMENT
===============
HPPC borrowed code, ideas or both from:
* Apache Lucene, http://lucene.apache.org/
(Apache license)
* Fastutil, http://fastutil.di.unimi.it/
(Apache license)
* Koloboke, https://github.com/OpenHFT/Koloboke
(Apache license)
HPPC: High Performance Primitive Collections
--------------------------------------------
See JavaDoc and documentation at: http://labs.carrotsearch.com/hppc.html for more info.
IMPORTANT: Developers - read INSTALL file for proper Eclipse setup!
HPPC: High Performance Primitive Collections
--------------------------------------------
Collections of primitive types (maps, sets, stacks, lists)
with open internals and an API twist
(no java.util.collections.* compatibility).
See the following for more information:
Wiki: https://github.com/carrotsearch/hppc/wiki
Bugs: http://issues.carrot2.org/browse/HPPC/
See ALTERNATIVES.txt if you're just shopping around.
See LICENSE.txt to make your company's lawyer happy.
See CHANGES.txt for API changes and updates.
(c) Carrot Search s.c., http://carrotsearch.com/
carrotsearch-hppc (0.7.2-1) UNRELEASED; urgency=medium
* Team upload.
* New upstream version.
-- Andrej Shadura <andrewsh@debian.org> Wed, 26 Dec 2018 21:19:38 +0100
carrotsearch-hppc (0.6.1-6) unstable; urgency=medium
* Team upload.
......
......@@ -5,9 +5,12 @@ Maintainer: Debian Java maintainers <pkg-java-maintainers@lists.alioth.debian.or
Build-Depends:
debhelper (>= 11),
default-jdk,
antlr4-maven-plugin,
libbuild-helper-maven-plugin-java,
libguava-java,
libmaven-antrun-plugin-java,
libmaven-assembly-plugin-java,
libmaven-bundle-plugin-java,
maven-debian-helper (>= 2.2),
velocity
Standards-Version: 4.2.1
......
......@@ -26,7 +26,7 @@
# Empty by default. [mh_install]
#
pom.xml --no-parent --has-package-version
hppc-templateprocessor/pom.xml --has-package-version
hppc-core/pom.xml --has-package-version
hppc-template-processor/pom.xml --has-package-version
hppc/pom.xml --has-package-version
hppc-examples/pom.xml --ignore
hppc-benchmarks/pom.xml --ignore
de.thetaphi forbiddenapis * * * *
com.carrotsearch hppc-benchmarks jar * * *
com.carrotsearch hppc-examples jar * * *
com.carrotsearch.randomizedtesting junit4-maven-plugin * * * *
......
org.apache.felix maven-bundle-plugin * s/.*/debian/ * *
org.apache.maven * * s/.*/3.x/ * *
junit junit jar s/4\..*/4.x/ * *
Description: Removes the @javax.annotation.Generated annotation in the template to fix the build failure with Java 11
Author: Emmanuel Bourg <ebourg@apache.org>
Forwarded: no
--- a/hppc-templateprocessor/src/main/java/com/carrotsearch/hppc/generator/TemplateOptions.java
+++ b/hppc-templateprocessor/src/main/java/com/carrotsearch/hppc/generator/TemplateOptions.java
@@ -105,7 +105,7 @@
--- a/hppc-template-processor/src/main/java/com/carrotsearch/hppc/generator/TemplateOptions.java
+++ b/hppc-template-processor/src/main/java/com/carrotsearch/hppc/generator/TemplateOptions.java
@@ -97,10 +97,10 @@
public String getGeneratedAnnotation()
{
- return "@javax.annotation.Generated(date = \"" +
+ return "//@javax.annotation.Generated(date = \"" +
getTimeNow() + "\", value = \"HPPC generated from: " +
sourceFile.getName() + "\")";
public String getGeneratedAnnotation() {
return String.format(Locale.ROOT,
- "@javax.annotation.Generated(\n" +
+ "//@javax.annotation.Generated(\n" +
" date = \"%s\",\n" +
" value = \"%s\")",
getTimeNow(),
TEMPLATE_FILE_TOKEN);
}
-}
\ No newline at end of file
+}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/hppc-benchmarks/target/eclipse&quot; type=&quot;2&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/hppc-benchmarks/src&quot; type=&quot;2&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:mvn.bat}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="auto,"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Peclipse,eclipse-builds&#13;&#10;compile&#13;&#10;-pl :hppc,:hppc-benchmarks"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/hppc-parent}"/>
</launchConfiguration>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>hppc-benchmarks</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>auto,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/hppc.benchmarks-jmh.launch</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AFTER_CLEAN_TARGETS" value="generate.sources,"/>
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AUTO_TARGETS" value="generate.sources,"/>
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/>
<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/hppc/target/eclipse/generated-sources&quot; type=&quot;2&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="hppc"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/hppc/src/main/templates&quot; type=&quot;2&quot;/&gt;&#13;&#10;&lt;item path=&quot;/hppc/src/test/templates&quot; type=&quot;2&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/hppc/build.xml}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:mvn.bat}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Dforbiddenapis.skip=true&#13;&#10;-Peclipse,eclipse-builds&#13;&#10;-pl :hppc&#13;&#10;process-test-classes"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/hppc-parent}"/>
</launchConfiguration>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>hppc</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>auto,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/hppc.templates-generate.launch</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>