////
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
////
= Apache Geronimo Arthur

image:https://img.shields.io/maven-central/v/org.apache.geronimo.arthur/arthur.svg[Maven Central]
image:https://github.com/apache/geronimo-arthur/workflows/Github%20CI/badge.svg[Github Action Status]

A thin layer on top of Orace GraalVM to build native binaries from your Java softwares.

More on our website: https://geronimo.apache.org/arthur/.

== Build the project

[source,bash]
----
# if you don't have docker, skip integration-tests profile
mvn clean install -Pintegration-tests
----

TIP: for now the project uses lombok, ensure it is installed in your IDE if you need it.
