Build update/cleanup (#102)

* Fix execution of QA plugins, such as license-maven-plugin
* Add generated code to the build in a simpler way without checking it
  in, or subjecting it to QA checks
* Place version management in parent pom
* Organize child modules in modules/ directory
* Use symlinks for test files instead of copying them with the resources
  plugin
* Configure annotation processor library explicitly instead of placing
  on the classpath
* Use fully-qualified module names (org.apache.*) to match the
  convention established by the automatic module names in the main
  Accumulo repo
* Address spotbugs, Java 21+ compiler warnings, and errorprone issues
* Update parent POM and plugins
* Add GitHub issue templates and fixup workflows
* Fix README to reflect correct version
* Remove unneeded default switch cases
* Avoid CharSequence.equals, which may not have a meaningful
  implementation
76 files changed
tree: 77673d9750c6bb5dc40c2c35398ee8d5008b125e
  1. .github/
  2. modules/
  3. src/
  4. .asf.yaml
  5. .gitignore
  6. DEPENDENCIES
  7. LICENSE
  8. NOTICE
  9. pom.xml
  10. README.md
  11. SPECIFICATION.md
README.md

Accumulo Access Library

Java library implementing the access expression DSL which can be used to determine if data is visible to an entity with a set of authorizations. For a conceptual overview of what an access expression is, see the specification document. See the Getting Started section for an example of how to use this java library.

This library provides the same functionality, semantics, and syntax as the Apache Accumulo ColumnVisibility and VisibilityEvaluator classes. This functionality is provided in a standalone java library that has no dependencies (for example no Hadoop, Zookeeper, Thrift, etc dependencies).

Public API

The following types constitute the public API of this library. All other types are package private and are not part of the public API.

Getting Started

Add the library to your CLASSPATH. For Maven, use:

<dependencies>
  <dependency>
    <groupId>org.apache.accumulo</groupId>
    <artifactId>accumulo-access</artifactId>
    <version>${version.accumulo-access}</version>
  </dependency>
</dependencies>

Running the Examples

To run AccessExample, set the version variable to this project's version and execute:

mvn clean package
java --module-path=modules/core/target/accumulo-access-core-$version.jar:modules/examples/target/accumulo-access-examples-$version.jar  --module=org.apache.accumulo.access.examples/org.apache.accumulo.access.examples.AccessExample
java --module-path=modules/core/target/accumulo-access-core-$version.jar:modules/examples/target/accumulo-access-examples-$version.jar  --module=org.apache.accumulo.access.examples/org.apache.accumulo.access.examples.AccessExample RED BLUE

Note that data6 is always returned, because it has no access expression. And remember, authorizations are case-sensitive.

To run ParseExamples, set the version variable to this project's version and execute:

mvn clean package
java --module-path=modules/core/target/accumulo-access-core-$version.jar:modules/examples/target/accumulo-access-examples-$version.jar --module=org.apache.accumulo.access.examples/org.apache.accumulo.access.examples.ParseExamples

For an ANTLRv4 example, see its README.

Running the Benchmark

This project includes JMH Benchmarks. To run them, execute:

mvn clean verify -Pbenchmark