Welcome to Apache OFBiz! A powerful top level Apache software project. OFBiz
is an Enterprise Resource Planning (ERP) System written in Java and houses a
large set of libraries, entities, services and features to run all aspects of
your business.

System requirements

The only requirement to run OFBiz is to have the Java Development Kit (JDK)
version 17 installed on your system (not just the JRE, but the full JDK) which
you can download from the below link. Make sure of setting the $JAVA_HOME
environment variable.

Warning: on Windows don't put OFBiz in a directory with space/s in the path.

https://adoptopenjdk.net/[JDK download]


Quick start

To quickly install and fire-up OFBiz, please follow the below instructions from
the command line at the OFBiz top level directory (folder).

    Download the Gradle wrapper:

        MS Windows: init-gradle-wrapper
        Unix-like OS: ./gradle/init-gradle-wrapper

        The OFBiz specific Gradle tasks are listed using "gradlew tasks"

    Prepare OFBiz:

         Clean system and load the complete OFBiz data
_______________________________________________________________________________
Note: Depending on your Internet connection speed it might take a long time
for this step to complete if you are using OFBiz for the first time as it needs
to download all dependencies. So please be patient!
_______________________________________________________________________________

            MS Windows: gradlew cleanAll loadAll
            Unix-like OS: ./gradlew cleanAll loadAll

            _______________________________________________________________________________
            Note:
            As a later step, to install without the demo data follow:
            (beware this is for development or production, not trying)

            Windows: gradlew cleanAll "ofbiz --load-data readers=seed,seed-initial" loadAdminUserLogin -PuserLoginId=admin
            Unix-like OS: ./gradlew cleanAll "ofbiz --load-data readers=seed,seed-initial" loadAdminUserLogin -PuserLoginId=admin

            The OFBiz install will be empty, there will be no chart of accounts, no transactions, no products, no customers and no suppliers.
            You can't log to the E-Commerce Store.
            You will get: "A Product Store has not been defined for this ecommerce site.
            A Product Store can be created using the ofbizsetup wizard."
            _______________________________________________________________________________

    Start OFBiz:

        MS Windows: gradlew ofbiz
        Unix-like OS: ./gradlew ofbiz

_______________________________________________________________________________
Note: Ignore the % progress indicator because this task does not end as long
as OFBiz is running.
_______________________________________________________________________________

    Visit OFBiz through your browser:

    https://localhost:8443/webtools

Going further
To complete your installation and use OFBiz please read README.adoc
You may prefer to read this AsciiDoc file in HTML format.
For that simply follow:
https://asciidoctor.org/docs/convert-documents/#converting-a-document-to-html
