////
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 XBean

The goal of XBean project is to created a plugin based server analogous to Eclipse being a plugin based IDE.
XBean will be able to discover, download and install server plugins from an Internet based repository.
In addition, we include support for multiple IoC systems, support for running with no IoC system, JMX without JMX code,
lifecycle and class loader management, and a rock solid Spring integration.

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

== Build the project

[source,bash]
----
mvn clean install
----

